You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
题目比较简单,不过为不同长度的数相加提供了一种思路:把数的链表先反转,然后再从前往后加,进位时向下一个节点的数据和加1.
void tail(ListNode *l2,int temp){ //结尾数据进位的处理
while(true){
if(l2->next==NULL){
if(temp==1){
ListNode *c = new ListNode (1); //这里要在堆里面分配内存,否则函数退出会被回收
l2->next = c;
}
break;
}else{ //可能会一直进位
int a=(l2->next->val+temp)%10;
temp=(l2->next->val+temp)/10;
l2->next->val=a;
l2=l2->next;
}
}
}
ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) {
ListNode *p=l1;
int temp=0;
while(true){
int current=( l1->val+l2->val+temp)%10;
temp=( l1->val+l2->val+temp)/10;
l1->val=current;
if(l1->next!=NULL&&l2->next!=NULL){
l1=l1->next;l2=l2->next;
}else
break;
}
if(l1->next==NULL&&l2->next==NULL){ //二者一样长
if(temp==1){
ListNode *c = new ListNode (1);
l1->next=c;
}
}else if(l1->next==NULL){ //l2长于l1,先将l2连到l1上在处理尾巴
int c=(l2->next->val+temp)%10;
temp=(l2->next->val+temp)/10;
l2->next->val=c;
l1->next=l2->next;
l2=l2->next;
tail(l2,temp);
}else //l1长于l2
tail(l1,temp);
return p;
};