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

LeetCode 2. Add Two Numbers代码报错排查:部分用例结果不符

LeetCode 2. Add Two Numbers 解法错误分析

你的代码错误原因

1. 链表转整数的逻辑完全搞反

题目中链表是逆序存储数字的每一位:比如l1=[2,4,9]对应的实际数字是942(个位2、十位4、百位9)。如果你的代码是按遍历顺序直接计算数值(比如num = num * 10 + node.val),得到的会是249,完全颠倒了原数。

对应你的测试用例:

  • l1转成了249,l2转成了5649,求和得5898;
  • 再把5898逆序转成链表,就得到了[8,9,8,5],这就是你看到的错误输出。

2. 整数溢出的本质问题

就算你修正了转整数的逻辑,这种思路依然不可行:题目没有限制链表的长度,当链表对应数字超过64位整数的存储范围时(比如链表长度超过20位),转成整数会直接溢出,数值被截断,求和结果必然错误。

正确解法思路:链表逐位相加处理进位

不需要转成整数,直接在链表上模拟加法过程:

  • 用一个哑节点作为结果链表的起始,方便处理头节点;
  • 用carry变量记录进位,初始为0;
  • 同时遍历两个输入链表,直到两者都遍历完且carry为0:
    • 取当前节点的值(链表遍历完则取0);
    • 计算总和sum = val1 + val2 + carry;
    • 新节点的值为sum % 10,更新carry = sum / 10;
    • 将新节点添加到结果链表中,移动指针继续处理;
  • 返回哑节点的下一个节点,就是最终结果链表。

针对你的测试用例的计算过程

  1. 2 + 5 + 0 = 7 → 节点7,carry=0;
  2. 4 + 6 + 0 = 10 → 节点0,carry=1;
  3. 9 + 4 + 1 = 14 → 节点4,carry=1;
  4. 0 + 9 + 1 = 10 → 节点0,carry=1;
  5. 0 + 0 + 1 = 1 → 节点1,carry=0;
    最终得到结果链表[7,0,4,0,1],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:46:21