鏈表兩數相加(add two numbers)

問題

給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。java

若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。this

您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。code

示例:class

輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出:7 -> 0 -> 8
緣由:342 + 465 = 807變量

解答

咱們使用變量來跟蹤進位,並從包含最低有效位的表頭開始模擬逐位相加的過程。List

代碼

public class AddTwoNumbers {

    private class ListNode{
        int val;
        ListNode next;
        ListNode(int x){this.val=x;}
    }

    /**
     * 輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
     * 輸出:7 -> 0 -> 8
     * 緣由:342 + 465 = 807
     *
     * @param l1
     * @param l2
     * @return
     */
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode sumNode = new ListNode(0);
        ListNode p1=l1,p2=l2,curr = sumNode;
        int carry = 0;
        while (p1!=null||p2!=null){
            int x = p1==null?0:p1.val;
            int y = p2==null?0:p2.val;
            int sum = carry+x+y;
            carry = sum/10;
            curr.next = new ListNode(sum%10);
            curr = curr.next;
            if(p1!=null) p1 = p1.next;
            if(p2!=null) p2 = p2.next;
        }
        if (carry>0){
            curr.next = new ListNode(carry);
        }

        return  sumNode.next;
    }
}
相關文章
相關標籤/搜索