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

LeetCode《Add Two Numbers》报错l1.reverse is not a function求助

解决LeetCode Add Two Numbers中l1.reverse is not a function错误

错误根源

你本地测试时用的是数组,但LeetCode平台实际传入的l1和l2不是JS原生数组,而是题目定义的链表节点对象。链表节点的结构大概是这样:

function ListNode(val, next) {
  this.val = (val === undefined ? 0 : val)
  this.next = (next === undefined ? null : next)
}

链表节点没有reverse()方法,所以调用时会直接报错。

另外你的代码还有个隐藏问题:如果输入的数字极大(超出JS整数精度范围2^53),parseInt会丢失精度,导致测试用例失败。

正确解法:链表遍历模拟加法

按照链表的特性,逐位相加并处理进位,才是符合题目要求的解法:

var addTwoNumbers = function(l1, l2) {
    // 虚拟头节点,简化结果链表的构建
    const dummyHead = new ListNode(0);
    let current = dummyHead;
    let carry = 0; // 进位值
    
    // 遍历两个链表,直到所有节点处理完且无进位
    while (l1 !== null || l2 !== null || carry !== 0) {
        const val1 = l1 ? l1.val : 0;
        const val2 = l2 ? l2.val : 0;
        
        const sum = val1 + val2 + carry;
        carry = Math.floor(sum / 10); // 更新进位
        current.next = new ListNode(sum % 10); // 当前位的结果
        
        // 移动指针
        current = current.next;
        if (l1) l1 = l1.next;
        if (l2) l2 = l2.next;
    }
    
    return dummyHead.next; // 跳过虚拟头节点,返回实际结果链表
};

解法说明

  • 虚拟头节点dummyHead:避免单独处理结果链表头节点为空的边界情况,直接在它后面追加节点即可
  • 进位处理:每次计算当前位和时,加上上一位的进位,再更新新的进位值
  • 循环终止条件:必须同时满足两个链表都遍历完毕,且没有剩余进位,否则会漏掉最后一位的进位(比如999+1=1000的情况)
  • 时间复杂度O(max(m,n)),m、n为两个链表的长度,空间复杂度O(max(m,n)),用于存储结果链表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:34:01