给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,而且它们的每一个节点只能存储 一位 数字。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 };
成绩指针