Я пытаюсь найти этот алгоритм на C ++ в .NET, но не могу, я нашел этот:
// 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;
}
, но кажется неправильным, или я ошибаюсь? Как я могу доказать, что мой заяц в конце концов встретит черепаху? Заранее спасибо за любые объяснения, как именно это работает, и доказательство
По поводу этого решения я обнаружил, что в обычном алгоритме они используют только один быстрый итератор, а здесь они используют два, почему?