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

LeetCode 60:寻找两个链表交点代码在特定测试用例失败求助

LeetCode 第60题《寻找两个链表的交点》代码错误修复

问题定位

你的代码逻辑框架正确,但在两个链表长度相等的测试用例中会失效,比如你提到的输入均为[2,2,4,5,4]且交点为节点4的场景。

错误原因

问题出在longList和shortList的赋值逻辑上:

ListNode longList = (aN > bN) ? headA : headB;
ListNode shortList = (aN < bN) ? headA : headB;

当两个链表长度相等(aN == bN)时:

  • aN > bN为false,longList被赋值为headB
  • aN < bN为false,shortList也被赋值为headB
    此时两个指针指向同一个链表,自然无法正确比较headA和headB的交点。

修正方案

调整shortList的赋值逻辑,确保长度相等时,longList和shortList分别指向两个不同的输入链表:

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        int aN = 0;
        ListNode a = headA;
        while (a != null) {
            aN++;
            a = a.next;
        }    

        int bN = 0;
        ListNode b = headB;
        while (b != null) {
            bN++;
            b = b.next;
        }

        ListNode longList, shortList;
        if (aN > bN) {
            longList = headA;
            shortList = headB;
        } else {
            longList = headB;
            shortList = headA;
        }

        for (int i = 0; i < Math.abs(aN - bN); i++) {
            longList = longList.next;
        }

        while (longList != null && shortList != null) {
            if (longList == shortList) { return longList; }
            longList = longList.next;
            shortList = shortList.next;
        }

        return null;
    }
}

修正说明

用if-else替代原有的两个独立三元表达式,保证:

  • 当aN > bN:长链表为headA,短链表为headB
  • 当aN <= bN:长链表为headB,短链表为headA
    这样无论两个链表长度是否相等,longList和shortList都会分别指向两个输入链表,后续的同步遍历和节点比较就能正常执行。

验证

针对你提到的测试用例,修正后的代码会:

  1. 计算出两个链表长度均为5,差值为0
  2. longList指向headB,shortList指向headA
  3. 从两个链表的头节点开始同步遍历,当遍历到第三个节点(值为4的节点)时,会检测到两个节点引用相等,返回该节点,符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:53:34