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

