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