计算链表中可能为循环的节点数

Tom*_*Tom 5 algorithm linked-list

这是问题所在,它来自Sedgwick在Java中出色的算法(q 3.54)

给定链接到单链表中不包含空链接的节点(即每个节点链接到自身或列表中的另一个节点)确定不同节点的数量而不修改任何节点并使用不超过常量内存空间.

你怎么做呢?扫描列表一次使用野兔和乌龟算法来确定它是否是任何方式的圆形,然后再次扫描以确定列表变为圆形的位置,然后再次扫描计算到这个位置的节点数?对我来说听起来有点蛮力,我想有更优雅的解决方案.

Art*_*ius 7

乌龟和野兔算法可以给你两个周期长度和节点的数量的周期开始(λ和μ分别)之前.