美文网首页
LeetCode题解:2. 两数相加,递归,JavaScript

LeetCode题解:2. 两数相加,递归,JavaScript

作者: Lee_Chen | 来源:发表于2023-11-15 21:40 被阅读0次

    原题链接:
    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
    }
    

    相关文章

      网友评论

          本文标题:LeetCode题解:2. 两数相加,递归,JavaScript

          本文链接:https://www.haomeiwen.com/subject/jpcewdtx.html