1. 程式人生 > >LeetCode-445. 兩數相加 II

LeetCode-445. 兩數相加 II

題目

給定兩個非空連結串列來代表兩個非負整數。數字最高位位於連結串列開始位置。它們的每個節點只儲存單個數字。將這兩數相加會返回一個新的連結串列。

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

進階:

如果輸入連結串列不能修改該如何處理?換句話說,你不能對列表中的節點進行翻轉。

示例:

輸入: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4)
輸出: 7 -> 8 -> 0 -> 7

解題

  • 將兩個連結串列倒轉之後,就轉換成了2號問題, 程式碼如下:
class
Solution { public ListNode addTwoNumbers(ListNode l1, ListNode l2) { Stack<Integer> s1 = linkedListToStack(l1); Stack<Integer> s2 = linkedListToStack(l2); Stack<Integer> result = new Stack<>(); int num1, num2; int sum = 0; int
carry = 0; while ((!s1.isEmpty()) || (!s2.isEmpty())){ if (!s1.isEmpty()){ num1 = s1.pop(); } else { num1 = 0; } if (!s2.isEmpty()){ num2 = s2.pop(); } else { num2 = 0; }
sum = num1 + num2 + carry; carry = sum / 10; result.push(sum % 10); } ListNode dummyHead = new ListNode(0); ListNode cur = dummyHead; // 處理最後的進位 if (carry == 1) { result.push(carry); } while (!result.isEmpty()) { cur.next = new ListNode(result.pop()); cur = cur.next; } return dummyHead.next; } private Stack<Integer> linkedListToStack(ListNode head){ Stack<Integer> stack = new Stack(); while (head != null){ stack.push(head.val); head = head.next; } return stack; } }