Floyd的循环寻找算法
我试图在.NET上用C ++找到这个算法,但不能,我找到了这个:
// Best solution
function boolean hasLoop(Node startNode){
Node slowNode = Node fastNode1 = Node fastNode2 = startNode;
while (slowNode && fastNode1 = fastNode2.next() && fastNode2 = fastNode1.next()){
if (slowNode == fastNode1 || slowNode == fastNode2) return true;
slowNode = slowNode.next();
}
return false;
}
但似乎不对,或者我错了?我怎么能真正证明我的野兔最后会遇到乌龟呢?提前感谢任何解释它是如何工作的和proof
EDITED
关于这个解决方案,我发现在常规算法中他们只使用一个快速迭代器,但在这里他们使用两个,为什么?
没有找到相关结果
已邀请:
3 个回复
呈辖玫割善
循环的条件下放置很多'动作',应该避免)。您可以使用一个变量以更易读的方式重写它:
爆刺疤灯
厢界山攀