LeetCodeHot100 2. 两数相加 思路JavaScript版本代码

张开发
2026/4/20 1:48:16 15 分钟阅读

分享文章

LeetCodeHot100 2. 两数相加 思路JavaScript版本代码
题目思路以题目提供的例子为例来进行思考分别将两个数倒过来计算类似如图,结合链表其实非常方便。创建一个新的虚拟链表newlist存储计算结果tail指向该链表的末尾。首先计算l1和l2的首位25 7更新newlist的tail的值为7tail tail.next。计算4610,进一位该位置为0,我们想到可以创建一个carry来存储进位 初始化值为0则十位的数为460%10意思时当前位置的l1的数加上l2的数加上当前位置的进位0,总和进行取余得到当前数字为0更新tail tail,nextl1l1.next,l2l2.next的值更新carry的值为(460)取整取整用的是Math.floor()函数得到结果为1则下一位的进位为1。来看百位341这里的1是刚才得到的进位 则当前位置的数为341%10。如果出现l1和l2任意一方不为零或者carry不为零我们都要继续更新值因此整个计算需要加上一个判断条件为 l1或者l2或者carry的值存在当然 carry要在最开始进行初始化为0。最后返回虚拟链表的下一个节点因为虚拟链表的头结点值为0。完整代码由于只看思路较乱因此可以结合代码注释再次从头到尾捋顺一下思路。/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val (valundefined ? 0 : val) * this.next (nextundefined ? null : next) * } */ /** * param {ListNode} l1 * param {ListNode} l2 * return {ListNode} */ var addTwoNumbers function(l1, l2) { let newlist new ListNode()//创建虚拟列表用来存储结果 let tail newlist//指向虚拟链表的末尾 let carry 0//存储进位的值 while(l1||l2||carry)//当l1或者l2或者carry存在 { let val1 0 let val2 0 if(l1)//如果l1存在获取l1的值并且向后移动l1节点,如果不存在则默认为val1的值为0 { val1l1.val l1 l1.next } if(l2) { val2 l2.val l2 l2.next } let sum val1val2carry let cur sum%10//得到当前位置的值对总和取余 tail.next new ListNode(cur)//新建一个节点存储当前位置的值并且挂载tail后 tail tail.next//向后移动tail的值 carry Math.floor(sum/10)//更新进位的值对sum向下取整 } return newlist.next//因为虚拟链表头节点为空返回其next };

更多文章