【发布时间】:2015-07-20 09:44:21
【问题描述】:
有人可以用这个例子解释弗洛伊德算法吗?它对我来说并没有终止,算法实现是否完整?
我的代码有问题吗?代码如下:
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循环以快速。兔子应该总是跳两次。
标签: c++ algorithm linked-list cycle floyd-cycle-finding