2. 兩數相加

題目
給定兩個非空鏈表來表示兩個非負整數。位數按照逆序方式存儲,它們的每個節點只存儲單個數字。將兩數相加返回一個新的鏈表。

你可以假設除了數字 0 之外,這兩個數字都不會以零開頭。

示例:

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


思考:加法的運算方式即是低位求和,若大於9則高位進1。位數逆序存入鏈表,則開始節點即是個位,位數依次遞增。


public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    ListNode result = new ListNode(0);
    ListNode tmpNode = result;
    int a;
    int b;
    while (l1 != null || l2 != null) {
        {
            // 如果l1不爲空,a=l1的值,l1指向next,否則a=0。
            if (l1 != null) {
                a = l1.val;
                l1 = l1.next;
            } else {
                a = 0;
            }
            // 如果l2不爲空,b=l2的值,l2指向next,否則b=0。
            if (l2 != null) {
                b = l2.val;
                l2 = l2.next;
            } else {
                b = 0;
            }
            // 求和
            int temp = a + b + tmpNode.val;
            if (temp < 10) {
                // 如果和小於10,則把和賦給當前節點
                tmpNode.val = temp;
                // 如果l1和l2都爲空,則不再產生下一個節點
                if (l1 != null || l2 != null) {
                    tmpNode.next = new ListNode(0);
                }
            } else {
                // 如果和大於10,則把和的個位賦給當前節點
                tmpNode.val = temp - 10;
                // 產生下一個值爲1的節點
                tmpNode.next = new ListNode(1);
            }
            // 指向下一個節點
            tmpNode = tmpNode.next;
        }
    }
    return result;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章