You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode中addTwoNumbers函数运行时错误排查求助

LeetCode add-two-numbers问题运行时错误修复

问题情况

我在解决LeetCode的add-two-numbers问题时,采用反转数组转数字相加、再转回反转数组返回的思路,本地运行正常,但提交到LeetCode后抛出运行时错误。

我的代码如下:

var addTwoNumbers = function(l1, l2) {
    var tempL1 =[]
    var tempL2 =[]
    for (var i = l1.length -1; i >= 0; i--) {
        tempL1.push(l1[i])
    }
        for (var i = l2.length -1; i >= 0; i--) {
        tempL2.push(l2[i])
    }
    var result = Number(tempL1.join("")) + Number(tempL2.join(""))
        var array = Array.from(result.toString())
    var finalArray = []
    for (let i = array.length -1; i >= 0; i--) {
        finalArray.push(array[i])
    }
    return finalArray
};

抛出的错误信息(翻译后):

Line 34 in solution.js
throw new TypeError(serialize(ret) + " is not valid value for the expected return type ListNode");
^
TypeError: ["0"] is not valid value for the expected return type ListNode
Line 34: Char 20 in solution.js (Object.)
Line 16: Char 8 in runner.js (Object.runner)
Line 18: Char 26 in solution.js (Object.)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:17:47

错误核心原因

这题的输入输出不是普通数组,而是ListNode链表结构:

  • 输入的l1、l2是ListNode实例,没有length属性,你用数组的遍历方式完全错误
  • 题目要求返回ListNode类型的链表,而你的代码返回了普通数组,类型不匹配导致报错

另外还有个隐藏问题:如果两个链表代表的数字很大,用Number转换会丢失精度,必须用BigInt处理。

修复后的代码

// 辅助函数:将链表转成BigInt数字
function listToNum(head) {
    let numStr = '';
    while (head) {
        numStr = head.val + numStr;
        head = head.next;
    }
    return BigInt(numStr);
}

// 辅助函数:将数字转成逆序链表
function numToList(num) {
    const numStr = num.toString();
    let dummy = new ListNode(0);
    let current = dummy;
    // 逆序遍历字符串,构建链表
    for (let i = numStr.length - 1; i >= 0; i--) {
        current.next = new ListNode(Number(numStr[i]));
        current = current.next;
    }
    // 如果结果是0,直接返回单个节点
    return dummy.next || new ListNode(0);
}

var addTwoNumbers = function(l1, l2) {
    const num1 = listToNum(l1);
    const num2 = listToNum(l2);
    const sum = num1 + num2;
    return numToList(sum);
};

说明

  1. 用listToNum遍历链表收集节点值,拼接成字符串后转成BigInt,避免大数精度丢失
  2. numToList将相加后的BigInt转成字符串,逆序遍历构建出符合要求的ListNode链表
  3. 完全符合题目对输入输出类型的要求,不会再出现类型不匹配的错误

内容的提问来源于stack exchange,提问作者AbdelrahmanAhmed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 17:21:07