lintcode-【簡單題】鏈表求和


題目:

你有兩個用鏈表代表的整數,其中每個節點包含一個數字。數字存儲按照在原來整數中相反的順序,使得第一個數字位於鏈表的開頭。寫出一個函數將兩個整數相加,用鏈表形式返回和。

樣例:

給出兩個鏈表 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 };
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM