Use Floyd's cycle detection: two pointers, one slow (moves 1 step) and one fast (moves 2 steps).
If there's no cycle, the fast pointer hits null first.
If there's a cycle, the fast pointer enters the cycle before slow. Once both are in the cycle, fast "chases" slow. Since fast gains 1 position per step, it eventually catches slow.
Think of it like two runners on a circular track. The faster one will eventually lap the slower one.