/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { int carry=0;//进位数设置,初始时刻为0 ListNode* head=NULL;//对输出链表进行初始化,若不初始化为NULL程序报错 ListNode* temp=NULL;//临时链表代替head while(l1||l2){//保证两个链表仍有数组要累加 int n1=l1?l1->val:0;//若链表不为空则赋值指向的值,若为空则赋值为零 int n2=l2?l2->val:0;//同时 int sum=n1+n2+carry;//对该位置进行加和,以此算出进位数和结果链表该位置的值 carry=sum/10;//计算进位数 if(!head){//如果head为空即首位第一次相加 head=temp=new ListNode(sum%10);//必须先new一个空间,将new出来的空间进行赋值 }else{ temp->next=new ListNode(sum%10);//temp->next是指针的名字,和二叉树不同,不能直接表示空间地址 temp=temp->next;//将temp进行重新赋值 } if(l1){ l1=l1->next;//l1链表移动 } if(l2){ l2=l2->next;//l1链表移动 } } if(carry){ temp->next=new ListNode(carry);//若到最后一位仍有进位数,再开辟一位空间存放 } return head; }};