LeetCode-445|兩數相加(2)
阿新 • • 發佈:2018-11-29
LeetCode-445
- 題目:
給定兩個非空連結串列來表示兩個非負整數。位數按照逆序方式儲存,它們的每個節點只儲存單個數字。將兩數相加返回一個新的連結串列。
你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。
示例:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807
- 解法
通過兩個棧來存放兩個連結串列,最終棧頂為數的低位,棧頂為棧的高位,然後兩個棧元素對應相加。最後注意是否有進位。 - 原始碼
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) { stack<int> s1, s2; // 棧 while(l1 != NULL){ s1.push(l1->val); l1 = l1->next; } while(l2 != NULL){ s2.push(l2->val); l2 = l2->next; } int sum = 0; ListNode* res = new ListNode(0); // 初始化頭結點 while(!s1.empty() || !s2.empty()){ if(!s1.empty()){ sum += s1.top(); s1.pop(); } if(!s2.empty()){ sum += s2.top(); s2.pop(); } res->val = sum%10; // 採用頭插法 sum /= 10; ListNode* head = new ListNode(sum); head->next = res; res = head; } if(!res -> val){ // 判斷是否最高位為0 res = res->next; } return res; } };