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

Java单链表reverseList方法运行报「检测到链表有环」问题咨询

反转单链表代码出现环的错误原因

核心问题定位

代码触发环检测的根本原因是初始prev节点指向错误,第一次指针修改就直接形成了闭环:

  • 初始状态下dummyHead.next = head(也就是第一个curr节点),而你将初始prev设置为dummyHead
  • 第一次进入循环执行curr.next = prev时,会直接把原链表第一个节点的next指针指向dummyHead,此时dummyHead → 原头节点 → dummyHead就形成了双向闭环,后续遍历链表时自然会检测到环存在

次要逻辑错误

反转逻辑额外引入了不必要的dummyHead,且收尾逻辑也存在问题:

  • 常规的逐个节点反转的迭代方案不需要dummyHead,原链表的尾节点反转后作为新的头节点,原头节点反转后作为尾节点,尾节点的next必须指向null,你现在的逻辑让原头节点的next指向了dummyHead,永远不会为null
  • 即使要使用dummyHead,你也没有在反转完成后将新的尾节点(原头节点)的next设置为null,闭环会一直存在

修正后的代码示例

public ListNode reverseList(ListNode head) {
    ListNode prev = null;
    ListNode curr = head;
    while (curr != null) {
        ListNode future = curr.next;
        curr.next = prev;
        prev = curr;
        curr = future;
    }
    return prev;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:07