关于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):
- 初始
cur = A,while cur:成立,进入循环,count变成1,cur移到B。 cur = B非空,继续循环,count变成2,cur移到C。cur = C非空,继续循环,count变成3,cur移到A。- 此时触发
if cur == self.head:,执行break,循环终止,返回3,完全符合预期。
你之前的误解是把两个条件混在了一起,但实际上只有当cur回到头节点时才会主动break,而while cur:只是确保我们不会去处理一个不存在的节点。
内容的提问来源于stack exchange,提问作者Tuning
相关产品推荐
相关产品推荐

