Two pointers traverse a linked list at different speeds — slow takes one step, fast takes two. When fast reaches the end, slow is at the middle. If there's a cycle, they collide.
What Is It?
You set up two pointers starting at the head. slow advances one node at a time, fast advances two. Because fast moves at double speed, when fast hits the end of the list, slow is exactly at the midpoint.