写点什么

LeetCode 题解:2. 两数相加,递归,JavaScript,详细注释

作者:Lee Chen
  • 2023-11-16
    福建
  • 本文字数:734 字

    阅读完需:约 2 分钟

原题链接:https://leetcode.cn/problems/add-two-numbers/


解题思路:


  1. 两位相加可能大于等于 10,需要进位,因此使用plus存储进位到下一位的1

  2. 利用递归,每次调用都计算l1.val + l2.val + plus之和sum,并创建一个新节点new ListNode(sum % 10),链接到新链表上。

  3. 递归需要传入当前链表的前一个节点prev,用于连接当前节点。


/** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */var addTwoNumbers = function (l1, l2) {  // 递归创建链表  function recursion(    prev, // 链表的上一个节点    l1, // l1的当前节点    l2, // l2的当前节点    plus, // 是否有进位  ) {    // 如果l1和l2都为null,表示它们都已经加完    if (!l1 && !l2) {      // 查看是否还有进位需要处理,此时plus可能为1      if (plus) {        prev.next = new ListNode(plus)      }
// l1、l2、plus都处理完后,终止递归 return }
// 取l2和l2的值,如果l1或l2为null,则值设置为0 const val1 = l1 ? l1.val : 0 const val2 = l2 ? l2.val : 0 // 求l1、l2、plus的值之和 const sum = val1 + val2 + plus // 如果sum>=10,表示需要进位,plus为1 plus = sum >= 10 ? 1 : 0 // 创建当前节点,将其连接到prev.next,其值为sum%10,因为当前位只需要存储个位数 prev.next = new ListNode(sum % 10)
// 将prev、l1、l2都向后移动一位,继续递归计算下一个节点的值之和 recursion(prev.next, l1 && l1.next, l2 && l2.next, plus) }
// 创建一个dummy节点,作为dummy.next连接到新链表的头节点 let dummy = new ListNode(null) recursion(dummy, l1, l2, 0)
return dummy.next}
复制代码


发布于: 刚刚阅读数: 3
用户头像

Lee Chen

关注

还未添加个人签名 2018-08-29 加入

还未添加个人简介

评论

发布
暂无评论
LeetCode题解:2. 两数相加,递归,JavaScript,详细注释_JavaScript_Lee Chen_InfoQ写作社区