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

链表两两交换(Swap Nodes in Pairs)代码遇无限循环,求问题排查

链表两两交换节点无限循环问题排查

嘿,我完全懂你面试复习卡在这里的烦躁!链表两两交换时出现无限循环,大多是指针移动逻辑错误或者节点引用形成了闭环,我给你梳理几个最常见的坑:


1. 指针未正确推进,反复处理同一组节点

这是最常见的原因!交换完当前的两个节点后,你必须把处理指针移动到下一组的起始位置。比如你用curr作为当前处理的前驱节点,交换完curr.next和curr.next.next后,curr需要更新为交换后的第一个节点(也就是curr.next.next),作为下一组的前驱。如果忘记移动curr,或者移动的位置不对,就会一直在原地重复交换同一对节点,直接触发无限循环。

2. 交换时形成循环引用

交换节点的逻辑顺序错了很容易出问题。举个正确的交换逻辑示例(以Python为例):

# 假设用虚拟头节点dummy,curr初始指向dummy
first = curr.next
second = curr.next.next
# 先把第一个节点的next指向第二个节点的下一个节点,避免断链
first.next = second.next
# 再把第二个节点指向第一个节点
second.next = first
# 最后把前驱节点指向第二个节点,完成交换
curr.next = second
# 推进curr到下一组的前驱位置
curr = first

如果你先执行second.next = first,再处理first.next,就可能让first.next还指向second,导致这两个节点互相引用形成小闭环,进而触发整个链表的无限循环。

3. 边界条件处理不当

如果你的循环条件只判断了curr.next存在,没判断curr.next.next存在,当链表长度为奇数时,最后一个节点没有下一个节点,继续操作会让指针指向None的next,导致指针混乱,甚至形成循环。正确的循环条件应该是while curr.next and curr.next.next:。

4. 虚拟头节点使用失误

很多人用虚拟头节点来简化头节点交换的边界处理,但如果循环结束后错误地返回了虚拟头节点的错误指向,或者虚拟头节点的指针在交换过程中被错误修改,也可能导致循环。


要是能把你的代码贴出来,我就能帮你精准定位问题啦!先对照上面的几点自查一下,大概率能找到问题所在~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:50