有人可以请解释Floyd算法与这个例子。它不是终止我的,算法是否实现了完整?弗洛伊德算法 - 周期检测 - 没有终止的例子
我的代码有问题吗?代码如下:
Node* FindLoopBegin(Node *head){
Node *slowptr = head,*fastptr = head;
bool LoopExists = false;
while(slowptr && fastptr){
fastptr = fastptr->next;
if(fastptr == slowptr) {LoopExists = true;break;}
if(fastptr == NULL) {LoopExists = false; return NULL;}
fastptr = fastptr->next;
if(fastptr == slowptr) {LoopExists = true;break;}
slowptr = slowptr->next;
}
if(LoopExists) {
slowptr = head;
while(slowptr != fastptr){
slowptr = slowptr->next;
fastptr = fastptr->next;
}
return slowptr;
}
return NULL;
}
对不良绘图道歉!
我觉得如果你找到了一个匹配,你可以退出第一个'while'循环来加快速度。野兔应该总是跳两次。 –