題目:
你有兩個用鏈表代表的整數,其中每個節點包含一個數字。數字存儲按照在原來整數中相反
的順序,使得第一個數字位於鏈表的開頭。寫出一個函數將兩個整數相加,用鏈表形式返回和。
樣例:
給出兩個鏈表 3->1->5->null
和 5->9->2->null
,返回 8->0->8->null
答案:
從頭到尾按鏈表順序遍歷相加就行啦,如果加到最后,進位不為0,還需要另外添加一個節點。
代碼:

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 /** 12 * @param l1: the first list 13 * @param l2: the second list 14 * @return: the sum list of l1 and l2 15 */ 16 ListNode *addLists(ListNode *l1, ListNode *l2) { 17 // write your code here 18 int carry = 0,value = 0; 19 ListNode *l1Iter = l1; 20 ListNode *l2Iter = l2; 21 ListNode *ansRoot = NULL,*ansIter = NULL; 22 23 while(l1Iter != NULL && l2Iter != NULL) 24 { 25 value = l1Iter->val + l2Iter->val + carry; 26 carry = value / 10; 27 value = value % 10; 28 29 ListNode *node = new ListNode(value); 30 if(ansRoot == NULL) 31 { 32 ansRoot = node; 33 } 34 35 if(ansIter != NULL) 36 { 37 ansIter->next = node; 38 } 39 40 ansIter = node; 41 l1Iter = l1Iter->next; 42 l2Iter = l2Iter->next; 43 } 44 45 while(l1Iter != NULL) 46 { 47 value = l1Iter->val + carry; 48 carry = value / 10; 49 value = value % 10; 50 51 ListNode *node = new ListNode(value); 52 if(ansRoot == NULL) 53 { 54 ansRoot = node; 55 } 56 57 if(ansIter != NULL) 58 { 59 ansIter->next = node; 60 } 61 62 ansIter = node; 63 l1Iter = l1Iter->next; 64 } 65 66 while(l2Iter != NULL) 67 { 68 value = l2Iter->val + carry; 69 carry = value / 10; 70 value = value % 10; 71 72 ListNode *node = new ListNode(value); 73 if(ansRoot == NULL) 74 { 75 ansRoot = node; 76 } 77 78 if(ansIter != NULL) 79 { 80 ansIter->next = node; 81 } 82 83 ansIter = node; 84 l2Iter = l2Iter->next; 85 } 86 87 if(carry != 0) 88 { 89 ListNode *node = new ListNode(carry); 90 if(ansIter != NULL) 91 { 92 ansIter->next = node; 93 } 94 } 95 return ansRoot; 96 } 97 };