1. 程式人生 > >LeetCode2——Add Two Numbers(兩個連結串列中的數字相加,形成新連結串列)

LeetCode2——Add Two Numbers(兩個連結串列中的數字相加,形成新連結串列)

鄙人不才,故收錄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。
  • 進位和結果位,分別用/和%運算得到。