2. Add Two Numbers

題目描述:給兩個用非空鏈表表示的非負整數,數字從低位到高位是從左到右排列的,每個節點只包含數的一位。將這兩個數的鏈表加為一個返回。如:

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8

分析:模擬遍歷兩鏈表,時間復雜度O(n + m),空間O(n)。

代碼

/**
 * 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 l(-1);
        int c = 0;
        ListNode *pre = &l;
        for (ListNode *pa = l1, *pb = l2; pa != nullptr || pb != nullptr; pa = pa == nullptr? nullptr : pa -> next, pb = pb == nullptr? nullptr : pb -> next, pre = pre -> next)
        {
            int ai = pa == nullptr? 0 : pa -> val;
            int bi = pb == nullptr? 0 : pb -> val;
            int v = (ai + bi + c) % 10;
            c = (ai + bi + c) / 10;
            pre -> next = new ListNode(v);
        }
        if (c > 0)
            pre -> next = new ListNode(c);
        
        return l.next;
    }
};
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容