/**
* 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) {
ListNode*p=l1,*q=l2,*cur,*res,*pre;
res=new ListNode;
cur=res;
int i=0,cur_val;
while(p&&q){
cur_val=p->val+q->val+i;
if(cur_val<10){
cur->val=cur_val;
i=0;
}
else {
cur->val=cur_val-10;
i=1;
}
p=p->next;
q=q->next;
if(!p&&!q){
if(i==1){
cur->next=new ListNode;
cur=cur->next;
cur->val=1;
}
cur->next=NULL;
return res;
}
cur->next=new ListNode;
cur=cur->next;
}
while(p){
pre=cur;
cur_val=p->val+i;
if(cur_val<10){
cur->val=cur_val;
i=0;
}
else{
cur->val=0;
i=1;
}
cur->next=new ListNode;
cur=pre->next;
p=p->next;
}
while(q){
pre=cur;
cur_val=q->val+i;
if(cur_val<10){
cur->val=cur_val;
i=0;
}
else{
cur->val=0;
i=1;
}
cur->next=new ListNode;
cur=pre->next;
q=q->next;
}
if(i==1){
cur->val=1;
cur->next=NULL;
}
else{
delete cur;
pre->next=NULL;
}
return res;
}
};
主要注意给定链表的等长与不等长情况和最后的进位情况