給出兩個 非空 的鏈表用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式存儲的,而且它們的每一個節點只能存儲 一位 數字。javascript
若是,咱們將這兩個數相加起來,則會返回一個新的鏈表來表示它們的和。java
您能夠假設除了數字 0 以外,這兩個數都不會以 0 開頭。git
示例:算法
輸入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 輸出:7 -> 0 -> 8 緣由:342 + 465 = 807
實現思路:性能
典型的鏈表遍歷操做題,很是簡單的指針操做,作題時注意考慮到邊界條件判斷便可。this
result
;Node
變量(代替指針)指向 被加數鏈表 的第二個節點(由於頭節點在實例化 result
時已經操做過)以及 result
鏈表 的頭節點;0
;Node
變量指向下一個節點便可;注:spa
parseInt
,轉而使用位運算 ~~
result
鏈表 的頭節點,全部相加的操做都放在循環中,最後返回 result.next
便可。這種方法能夠 AC
,但因爲多了一個空節點,在內存和性能上都稍差。個人實現:3d
/** * 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) { const count = l1.val + l2.val let carry = ~~(count / 10) const result = new ListNode(count % 10) let currentNode1 = l1.next let currentNode2 = l2.next let currentNode3 = result while (currentNode1 || currentNode2 || carry) { let digit = carry if (currentNode1 && currentNode2) { digit += currentNode2.val + currentNode1.val currentNode1 = currentNode1.next currentNode2 = currentNode2.next } else if (currentNode1) { digit += currentNode1.val currentNode1 = currentNode1.next } else if (currentNode2) { digit += currentNode2.val currentNode2 = currentNode2.next } carry = ~~(digit / 10) currentNode3 = currentNode3.next = new ListNode(digit % 10) } return result };
成績指針