有人可以請解釋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'循環來加快速度。野兔應該總是跳兩次。 –