你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反
的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。
给出两个链表 3->1->5->null
和 5->9->2->null
,返回 8->0->8->null
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/*
* @param l1: the first list
* @param l2: the second list
* @return: the sum list of l1 and l2
*/
ListNode * addLists(ListNode * l1, ListNode * l2) {
// write your code here
ListNode * p1,*p2;
p1=l1;
p2=l2;
int m;
while(1){
if(p1==NULL){
m=1;
break;
}
if(p2==NULL){
m=2;
break;
}
p1=p1->next;
p2=p2->next;
}
p1=l1;
p2=l2;
while(1){
if(p1==NULL){
return l2;
}
if(p2==NULL){
return l1;
}
if(m==2){
p1->val+=p2->val;
if(p1->val>=10){
p1->val-=10;
if(p1->next==NULL){
l2->next=NULL;
l2->val=1;
p1->next=l2;
return l1;
}
p1->next->val+=1;
}
}else{
p2->val+=p1->val;
if(p2->val>=10){
p2->val-=10;
if(p2->next==NULL){
l1->next=NULL;
l1->val=1;
p2->next=l1;
return l2;
}
p2->next->val+=1;
}
}
if(p1->next==NULL&&p2->next!=NULL&&p2->next->val==10){
p2->next->val=0;
l1->next=NULL;
l1->val=1;
p2->next->next=l1;
return l2;
}
if(p2->next==NULL&&p1->next!=NULL&&p1->next->val==10){
p1->next->val=0;
l2->next=NULL;
l2->val=1;
p1->next->next=l2;
return l1;
}
p1=p1->next;
p2=p2->next;
}
}
};