if(l2!=NULL){pre1->next=l2;pre2->next=NULL;)
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
注意最后是否需要生成一个节点。
解法一:利用原有的list,最多new一个节点。
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *addTwoNumbers(ListNode *l1, ListNode *l2) { 12 13 ListNode* pre1, *pre2, *head=l1; 14 int a=0; 15 int re=0; 16 bool flag=false; 17 while(l1!=NULL&&l2!=NULL) 18 { 19 20 re=(l1->val+l2->val+a)%10; 21 a=(l1->val+l2->val+a)/10; 22 l1->val=re; 23 pre2=l2; 24 pre1=l1; 25 l1=l1->next; 26 l2=l2->next; 27 } 28 if(l2!=NULL) 29 { 30 pre1->next=l2; 31 pre2->next=NULL; 32 flag=true; 33 } 34 while(l1!=NULL) 35 { 36 re=(a+l1->val)%10; 37 a=(a+l1->val)/10; 38 l1->val=re; 39 pre1=l1; 40 l1=l1->next; 41 } 42 while(l2!=NULL) 43 { 44 re=(a+l2->val)%10; 45 a=(a+l2->val)/10; 46 pre2=l2; 47 l2->val=re; 48 l2=l2->next; 49 } 50 if(a!=0) 51 { 52 ListNode* last=new ListNode(a); 53 if(flag) 54 pre2->next=last; 55 else 56 pre1->next=last; 57 } 58 59 return head; 60 61 } 62 };
解法二:把结果放到一个全新的list中去。(略)