Tortoise & Hare
Cycle detection and cycle-start finding with two speeds.
This animation shows Floyd's cycle detection — two runners on a list track that curls back into itself.
The tortoise moves one hop per tick; the hare moves two. Watch what the speed difference does once both are inside the loop: the gap between them shrinks by exactly one node per tick, so the hare cannot skip past the tortoise — they must land on the same node. That collision, marked with a pulse, is the proof a cycle exists. On a straight track with no loop, the hare simply runs off the end, which is why the code checks fast and fast.next for null before every double-step.
Phase two answers a harder question: where does the cycle begin? A third runner spawns at the head, and now it and the tortoise both move one hop per tick. Watch where they meet — it is always the exact node where the track first curls into the loop, flagged "cycle start". This is not luck: the math of the first meeting point guarantees the distance from the head to the cycle start equals the distance from the meeting point around to it.
Keep an eye on memory: no visited set, no markings on nodes — two pointers, O(1) space. That is the entire selling point.