羊毛 | 寫 Code 雜談

願如同童話裡的山羊般咀嚼知識

0%

LeetCode with JS - 0002 Add Two Numbers

Leetcode: https://leetcode.com/problems/add-two-numbers/

[正文]

分析

題目就是做數字相加,數字的資料結構是 reverse linked list,所以相加只要順著走就可以從個位數開始,只要好好維護 carry 加到下一位數上就好,主要的難點在於會不會操作 linked list;

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
let result = new ListNode(0);

let carry = 0, pointer = result;
while (l1 !== null || l2 !== null) {
let sum = carry;
if (l1 !== null) { sum += l1.val; l1 = l1.next; }
if (l2 !== null) { sum += l2.val; l2 = l2.next; }

carry = (sum > 9) ? 1 : 0;
pointer.next = new ListNode(sum % 10);
pointer = pointer.next;
}

if (carry === 1) {
pointer.next = new ListNode(carry);
}

return result.next;
};
  1. result 指向 linked list 最一開始的 node;
  2. pointer 是指標的指標,用來指向目前 linked list 最後一個 node 的位置;
  3. carry 的部分只要 sum > 9 就設成 1,反之為 0,千萬不要像 c 一樣直接除(/) 10,會變成小數;