題目: LeetCode - 2. Add Two Numbers

題目說明

給兩個 Linked List ( 順序是由小位數到大位數 ),求相加後的結果。

解題思路

定義一個 carry,使用一個迴圈,carry 每次都將 l1->val ( 若存在 ) 和 l2->val ( 若存在 ) 加上,然後新建一個 nodenode-val 的值為 carry 除以 10 的餘數,最後再把新建的 node 接上即可。

參考解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry = 0, firstNode = 1;
auto res = l1, curr = l1;
while(l1 || l2 || carry != 0)
{
if(l1)
carry += l1->val, l1 = l1->next;
if(l2)
carry += l2->val, l2 = l2->next;
auto newNode = new ListNode(carry % 10);
if(firstNode)
res = curr = newNode, --firstNode;
else
curr->next = newNode, curr = curr->next;
carry /= 10;
}
return res;
}
};