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

LeetCode两两交换链表节点问题:Java代码报错原因分析求助

两两交换链表节点代码故障分析

针对你提供的Java代码,无法正常实现两两交换链表节点的问题,核心原因如下:

  • 递归计数器传递错误:reverseList方法中使用counter++传递参数,这是后置自增操作,Java参数传递是值传递,因此每次递归传入的counter值始终是初始的0,永远无法触发counter == 1的终止条件。这会导致递归不会在交换两个节点后停止,而是会一直反转到链表的末尾,破坏了两两交换的逻辑。

  • 头节点未更新:swapPairs方法最终返回的是原始的node(即链表初始头节点),但第一次两两交换后,新的链表头应该是反转后的头节点(原第二个节点)。比如输入1->2->3,反转后正确头节点是2,但代码返回的还是1,直接导致结果头节点错误。

  • 链表连接逻辑混乱:循环中head = reverseList(head, 0)获取反转后的头节点后,执行head.next = cur.next.next,此时cur还是初始的节点(第一次循环时是1),后续将cur = head会导致后续循环无法正确关联前一组交换后的尾节点(比如1的next应该指向4,但代码中没有处理这一步),造成链表断裂或连接错误。

  • 反转后节点next错误置空:reverseList中执行node.next = null,会将每一组反转后的前一个节点的next置为null。比如交换1和2后,1的next变成null,而不是指向后续的3,导致链表在交换后直接断裂,无法继续处理后续节点。

// 错误点示例:counter++传递的是原值,递归无法终止在两个节点
ListNode newHead = reverseList(node.next, counter++);
// 错误点示例:反转后节点next被置空,链表断裂
node.next = null;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:49:59