The fast/slow pointer technique uses two pointers walking the list at different speeds. Slow advances one node per step; fast advances two. The differential between them encodes useful structural information about the list.
Cycle detection
Floyd's algorithm: start both pointers at the head, advance slow by 1 and fast by 2 each step. If there's a cycle, fast will eventually catch up to slow inside the cycle. If fast reaches null, there's no cycle. time, space — strictly better than the -space hash-set alternative.
Finding cycle start
Once they meet, reset slow to the head and advance both pointers one step at a time. They meet again exactly at the start of the cycle. The proof is a clean modular arithmetic argument: at the meeting point, the distance from head to cycle start equals the distance from meeting point to cycle start (mod cycle length).
Finding the middle
Advance slow by 1, fast by 2. When fast reaches the end, slow is at the middle. For even-length lists, slow lands on the upper-middle node (this is usually what you want for split-and-merge problems like sorting a linked list).
$k$-th from end
A variant: advance fast steps first, then advance both together until fast reaches null. Slow is at the -th node from the end. Single pass, space.
Why this matters
These problems all look like they need either two passes or a hash set. The fast/slow trick collapses them into a single pass with constant memory. Recognizing the pattern is one of the cleanest wins in interview prep — the moment you see "linked list cycle / midpoint / -th from end," you know which tool to reach for.