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

