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
相关产品推荐
相关产品推荐

