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

Python链表快慢指针找中间元素while循环为何判断fast.next而非fast.next.next

快慢指针法查找链表中间元素的循环条件说明

快慢指针法的常见实现代码如下:

slow = self.head
fast = self.head

while fast and fast.next:
    slow = slow.next
    fast = fast.next.next
 
print("The middle element is ", slow.data)

不能直接用fast.next.next作为循环判断条件的原因

  • 首先会触发空指针异常
    Python中只要从None对象访问.next属性,就会直接抛出AttributeError。如果直接判断fast.next.next,三种场景都会直接报错:
    • 链表为空时,fast本身就是None,访问fast.next就会报错
    • 链表只有1个节点时,fast.next是None,访问fast.next.next会报错
    • 当fast遍历到链表最后一个节点时,fast.next已经是None,访问fast.next.next会报错
  • 其次fast and fast.next利用了Python的短路逻辑,天然规避了空访问风险
    该条件的判断顺序是先看fast是否为None,如果是直接终止判断、退出循环;如果fast不为None,再判断fast.next是否为None,全程不会出现非法的空对象属性访问。
  • 最后该条件可以同时兼容奇数、偶数长度的链表
    • 链表长度为奇数时,循环终止时fast刚好落在最后一个节点,slow恰好指向正中间的节点
    • 链表长度为偶数时,循环终止时fast为None,slow恰好指向偶数长度下的第二个中间节点,符合多数算法场景的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:45:05