Add Two numbers

。題目假設

給兩個鏈表,各自代表一個整數,求相加的結果

。重要問題

如果先將鏈表變為整數 -> 相加 -> 再轉為鏈表,有可能會溢位,就算用 long 也有問題,可能是一個超長整數!

。直覺

先將鏈表變為整數 -> 相加 -> 再轉為鏈表

。解決方法可行性

失敗,因為可能是超長整數,所以只能用鏈表相加,然後要注意進位

。解決方案

用鏈表相加

。資料結構

linked list

。複雜度

O(n)

。遇到的困難點、想錯的地方

這題考點大概是整數溢位,要跟出題者討論清楚

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    if (l1 == null || l2 == null)
        return new ListNode(-1);

    int extra = 0;
    ListNode head = new ListNode(-1);
    ListNode cur = new ListNode(-1);
    while (l1 != null || l2 != null)
    {
        int sum = 0;
        if (l1 != null && l2 != null) {
            sum = l1.val+l2.val+extra;
            l1 = l1.next;
            l2 = l2.next;
        }
        else if (l1 == null && l2 != null) {
            sum = extra + l2.val;
            l2 = l2.next;
        } 
        else {
            sum = extra + l1.val; 
            l1 = l1.next;
        }

        extra = sum / 10;
        sum = sum % 10;
        ListNode newNode = new ListNode(sum);
        if (head.next == null)
        {
            head.next = newNode;
            cur = head.next;
        }
        else {
            cur.next = newNode;
            cur = cur.next;
        }
    }
    if (extra != 0)
        cur.next = new ListNode(extra);

    return head.next;
}

results matching ""

    No results matching ""