リンクリストが与えられた場合、それが非循環であるかどうかを調べたい場合は、異なる速度でリストを実行する2つのポインターを持つことができることを理解しています。次に、速いものと遅いものの値を比較し、両方が同じである場合、リストは循環的であることがわかります。しかし、私は人々が遅いポインターを次の速いポインターと比較しているのを見てきました。このコードのように:
bool findCircular(Node *head)
{
Node *slower, * faster;
slower = head;
faster = head;
while(true) {
// if the faster pointer encounters a NULL element
if( !faster || !faster->next)
return false;
//if faster pointer ever equals slower or faster's next
//pointer is ever equal to slow then it's a circular list
else if (faster == slower || faster->next == slower)
return true;
else{
// advance the pointers
slower = slower->next;
faster = faster->next->next;
}
}
}
なぜこの条件が必要なのですか:faster->next == slower
?? これだけでは十分ではありません:faster == slower
ありがとう