Floyd's cycle detection は、異なる速度で動く 2 つのポインタを使用して、シーケンス (リンクリストなど) のループを検出します。サイクルが存在する場合、高速ポインタは遅いポインタに追いつきます。O(1) の追加空間を使用します。
アイデア
slow ポインタを 1 ステップ、fast ポインタを 2 ステップ動かします。サイクル内では、ギャップが毎ステップ 1 ずつ縮まるため、必ず衝突します。サイクルがない場合、fast ポインタが終端に到達します。
例
python
():
slow = fast = head
fast fast.:
slow = slow.
fast = fast..
slow fast:
