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

Java编写单链表反转代码时循环仅执行一次的问题求助

单链表反转代码错误分析

核心错误原因

你的代码问题出在直接共享节点引用导致原cur节点的next指针被提前修改:

  • newHead = cur这行赋值后,newHead和cur是指向同一个链表节点对象的引用,修改newHead.next等价于直接修改cur.next
  • 第一次循环时prev为null,执行newHead.next = prev后,cur的next就被设置成了null,后续执行cur = cur.next时cur直接变为null,循环自然只会执行一次。

修复方案

你需要在修改cur节点的next指针前,先把cur原本的next节点暂存下来,再做指针反转操作,修改后的代码如下:

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode cur = head, prev = null;
        while(cur != null) {
            // 先暂存当前节点的原next节点
            ListNode tempNext = cur.next;
            // 反转当前节点的指针
            cur.next = prev;
            // 移动prev和cur指针
            prev = cur;
            cur = tempNext;
        }
        // 循环结束后prev就是新的头节点
        return prev;
    }
}

修复后执行逻辑说明

以原链表1→2→3→null为例:

  • 第一次循环:暂存cur.next=2,把1的next设为null,prev=1,cur=2
  • 第二次循环:暂存cur.next=3,把2的next设为1,prev=2,cur=3
  • 第三次循环:暂存cur.next=null,把3的next设为2,prev=3,cur=null
  • 循环结束,返回prev也就是新头节点3,最终反转后的链表为3→2→1→null

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:45:03