題目:2.兩數相加 解題思路及Java實現

adrian_hk發表於2020-10-28

給出兩個 非空 的連結串列用來表示兩個非負的整數。其中,它們各自的位數是按照逆序的方式儲存的,並且它們的每個節點只能儲存 一位 數字。
如果,我們將這兩個數相加起來,則會返回一個新的連結串列來表示它們的和。
您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。

例如:
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
原因:342 + 465 = 807

思路:題目裡給的是各自的位數是按照逆序儲存的,所以從低位開始相加,主要是要考慮進位,遍歷到高位的時候要加上低位相加時產生的進位。 如果兩個連結串列長度不一致,缺少的位就用0來補。

程式碼:

package code;

public class demo02 {
    public ListNode addTwoNumbers(ListNode l1,ListNode l2){
        ListNode root = new ListNode(0);
        ListNode temp = root;
        int addNum = 0; //進位
        int num1 = 0;
        int num2 = 0;
        while (l1 != null || l2 != null || addNum != 0){
            num1 = l1 == null ? 0 : l1.value;
            num2 = l2 == null ? 0 : l2.value;
            int sum = num1 + num2 + addNum;
            int sumNum = sum%10;
            ListNode listNode = new ListNode(sumNum);
            temp.next = listNode;
            temp = temp.next;
            addNum = sum/10;
            if (l1 != null) l1 = l1.next;
            if (l2 != null) l2 = l2.next;
        }

        return root.next;
    }

    static class ListNode{
        int value;
        ListNode next ;

        public ListNode(int value) {
            this.value = value;
        }
    }

}

相關文章