1. 程式人生 > >【LeetCode】 2 兩數相加

【LeetCode】 2 兩數相加

在這裡插入圖片描述


解題思路:
1 每個節點相加的結果需要一個進位flag,注意置空。
2 以前的思路是當某個連結串列加完之後,再在結果上接上另一個連結串列即可,但是此題存在連續進位問題。
3 所以讓指到結尾的連結串列指標(為null)陪跑即可,即如果null則加0,這樣可以保持程式的一致性。

程式碼:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        int flag = 0;
        ListNode result = new ListNode(-1);
        ListNode p = l1, q = l2, r = result;

        while (p != null || q != null){
            int x = p == null? 0:p.val;
            int y = q == null? 0:q.val;
            int sum = x + y + flag;
            
            r.next = new ListNode(sum % 10);
            r = r.next;
            
            flag = sum / 10;
            
            if (p != null) p = p.next;
            if (q != null) q = q.next;
        }
        
        //如果最後還進位了
        if (flag > 0){
            r.next= new ListNode(1);
        }
        
        return result.next;
    }
}