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

关于Python循环链表长度计算代码中while cur:条件的疑问

关于循环链表长度计算中while cur:条件的解析

嘿,我来帮你把这个疑问掰明白~

首先直接给你结论:while cur: 根本不是在检查cur是否等于self.head,它的作用是判断当前的cur节点是否是一个有效的非空节点(也就是不是None)。

我们结合这段代码一步步拆解逻辑:

def __len__(self):
    cur = self.head
    count = 0
    while cur:
        count += 1
        cur = cur.next
        if cur == self.head:
            break
    return count

1. while cur: 的核心作用

这个条件是在做“兜底检查”:

  • 如果链表是空的,self.head就是None,此时while cur:直接不执行循环,返回0,逻辑正确。
  • 如果链表构造过程中出现异常(比如某个节点的next意外变成了None,不再是标准循环链表),这个条件会在cur变成None时终止循环,避免出现无限循环或者对None节点访问next的报错。

2. 和cur == self.head的区别

这是两个完全独立的判断:

  • while cur: 管的是“当前节点是否存在”
  • if cur == self.head: 管的是“是否遍历完一圈回到了起点”

举个实际的循环链表例子(3个节点:A→B→C→A):

  1. 初始cur = A,while cur:成立,进入循环,count变成1,cur移到B。
  2. cur = B非空,继续循环,count变成2,cur移到C。
  3. cur = C非空,继续循环,count变成3,cur移到A。
  4. 此时触发if cur == self.head:,执行break,循环终止,返回3,完全符合预期。

你之前的误解是把两个条件混在了一起,但实际上只有当cur回到头节点时才会主动break,而while cur:只是确保我们不会去处理一个不存在的节点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 20:57:55