1. 程式人生 > >Leetcode 2. Add Two Numbers (java)

Leetcode 2. Add Two Numbers (java)

style 相加進位 ret java numbers null bool ext leet

解法:

class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode l3 = null;
        boolean add = false;
        while (l1 != null || l2 != null) {
            //位數相加
            int plus;
            if (l1 == null) {
                plus = l2.val;
            } else
if (l2 == null) { plus = l1.val; } else { plus = l1.val + l2.val; } if (add) { plus++; add = false; } //生成節點 ListNode temp; if (plus >= 10) { temp
= new ListNode(plus % 10); add = true; } else { temp = new ListNode(plus); } //拼接節點 ListNode l3Head = l3; if (l3 == null) { l3 = temp; if (add && (l1 == null || l1.next == null
) && (l2 == null || l2.next == null)) { l3.next = new ListNode(1); } } else { while (l3Head.next != null) { l3Head = l3Head.next; } l3Head.next = temp; if (add && (l1 == null || l1.next == null) && (l2 == null || l2.next == null)) { l3Head.next.next = new ListNode(1); } } //跳到下一位 if (l1 == null) { l2 = l2.next; } else if (l2 == null) { l1 = l1.next; } else { l1 = l1.next; l2 = l2.next; } } return l3; } }

最開始有三種思路:

  1. 轉換成數值相加後,在轉換成鏈表,但數值過大,使用long也不足以存儲
  2. 翻轉鏈表進行相加,但未翻轉前更便於相加進位
  3. 直接使用鏈表進行相加進位

最後采用了最後一種思路

github地址:https://github.com/CyanChan/Leetcode-Record

Leetcode 2. Add Two Numbers (java)