You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
最后返回的是 root.next,这是因为我们在 while 循环中直接第一步就是 cur.next = new ListNode(),如果不这么做的话我们还需要在 traverse 的方法中判断是否是头部节点来决定是要对 next 节点还是 cur 节点赋求和的值,非常麻烦。这个技巧叫做傀儡节点,非常实用。
var addTwoNumbers = function(l1, l2) {
let p3=l3=new ListNode()
let p1=l1
let p2=l2
let car=0
while(p1||p2){
let v1=p1?p1.val:0
let v2=p2?p2.val:0
let v3=v1+v2+car
car=Math.floor(v3/10)
p3.next=new ListNode(v3%10)
if(p1)p1=p1.next
if(p2)p2=p2.next
p3=p3.next
}
if(car){
p3.next=new ListNode(car)
}
return l3.next
};
给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-two-numbers
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
这题的题目描述写的很烂,其实就是两个链表
2 -> 4 -> 3
和5 -> 6 -> 4
相加而已,原因里非要把数字倒过来不知道整什么。需要注意的点:
4 + 6
这种得出的结果 >= 10,需要在下一次求和中进位,也就是把下一次求和的结果 +1。1
。在代码中我们直接把链表求和的双链表和单链表情况都封装在了一个方法里,通过一个初始是否传入
listNode2
来建立一个标志位便于后续判断,并且双链表求和完了以后会递归的调用自身,变成处理单链表的状态。最后返回的是
root.next
,这是因为我们在 while 循环中直接第一步就是cur.next = new ListNode()
,如果不这么做的话我们还需要在traverse
的方法中判断是否是头部节点来决定是要对next
节点还是cur
节点赋求和的值,非常麻烦。这个技巧叫做傀儡节点,非常实用。The text was updated successfully, but these errors were encountered: