给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
来源:力扣(LeetCode)
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2){
struct ListNode* p1;
struct ListNode* p2;
struct ListNode new1,new2,head;
int sum,extra,change=0;
p1=l1;p2=l2;
head=(struct ListNode)malloc(sizeof(struct ListNode));
new1=head;
while(p1!=NULL&&p2!=NULL){
sum=p1->val+p2->val+change;
change=0;
if(sum>=10){
extra=sum%10;
change=1;
}
else
extra=sum;
new2=(struct ListNode)malloc(sizeof(struct ListNode));
new2->val=extra;
new1->next=new2;
new1=new2;
p1=p1->next;
p2=p2->next;
}
if(p1NULL&&p2NULL&&change==1){ //5,5的情况,和为10,输出0,1
new2=(struct ListNode)malloc(sizeof(struct ListNode));
new2->val=1;
new1->next=new2;
new1=new2;
change=0;
}
while(p1!=NULL){
new2=(struct ListNode*)malloc(sizeof(struct ListNode));
sum=p1->val+change;
if(sum>=10){ //可能仍会进位
extra=sum%10;
change=1;
new2->val=extra;
new1->next=new2;
new1=new2;
}
else{ //若不进位,原顺序保存
new2->val=sum;
new1->next=new2;
new1=new2;
change=0;
}
p1=p1->next;
}
while(p2!=NULL){
new2=(struct ListNode*)malloc(sizeof(struct ListNode));
sum=p2->val+change;
if(sum>=10){
extra=sum%10;
change=1;
new2->val=extra;
new1->next=new2;
new1=new2;
}
else{
new2->val=sum;
new1->next=new2;
new1=new2;
change=0;
}
p2=p2->next;
}
if(change==1){ //最后一次进位,则保存1;
new2=(struct ListNode*)malloc(sizeof(struct ListNode));
new2->val=1;
new1->next=new2;
new1=new2;
}
new1->next=NULL;
return head->next;
}