LeetCode2——Add Two Numbers(兩個連結串列中的數字相加,形成新連結串列)
阿新 • • 發佈:2019-01-29
鄙人不才,故收錄LeetCode中的解法和程式碼。
題目:
參考解法:
/** * 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) { ListNode preHead(0), *p = &preHead; int extra = 0; while (l1 || l2 || extra) { int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra; extra = sum / 10; p->next = new ListNode(sum % 10); p = p->next; l1 = l1 ? l1->next : l1; l2 = l2 ? l2->next : l2; } return preHead.next; } };
分析:這裡主要有兩個問題,一個是兩個連結串列長度不一致時的處理,一個是相加>10時的資料處理。
- 參考解法中運用三目運算子,很好地解決了第一個問題。即長度不一致時,比較短的那個連結串列用空來表示,資料為0。
- 進位和結果位,分別用/和%運算得到。