The Fast Pointer Catches the Loop
With enough practice, a linked-list cycle becomes a familiar surprise: the missing end I once dreaded is now the clue I’m relieved to find. There may be no None, no tail I can eventually reach, and no obvious sign that I have already passed this node before. The solution is to stop looking for the end and make two pointers disagree about time.