I also think the top answer is incomplete, and while some of the other explanation are also good, I have another version without MOD to show the same thing, which is perhaps easier for some people.
The same setup, consider $X\ge 0$ being the distance before the loop, $N \le \text{size of list}$ being the size of the loop (the quantity $y+z$ in the picture), and the meeting point be $Y$ in the Loop.
At this point, notice that we have also made $X+Y \le N$.
Now, the slow pointer travels $X+Y+pN$, where $p$ is an arbitrary integer. Then fast pointer travelled $2(X+Y+pN)$.
Now, we claim that they meet at $Y$.
Proof:
If they meet at $Y$, it must be that the faster pointer travelled exactly $qN$ more than the slower pointer, where $q$ is an integer. Then we have:
$$\text{distance difference = }2(X+Y+pN)-(X+Y+pN)=X+Y+pN$$.
But we had $Y$ being an arbitrary meeting point in the loop, so we can choose simply $X+Y=N$, which holds as $X+Y \le N$.
Therefore, we have:
$$
X+Y+pN=N+pN=(p+1)N = qN
$$
which is true if $p+1=q$.
Now, since both $p$ and $q$ are arbitrary integers, we can just choose the minimum so that $p=0,q=1$, which corresponds to:
$$
\text{distance travelled by slow pointer}=X+Y+pN=X+Y
$$
and
$$
\text{distance travelled by fast pointer}=(X+Y+pN)+qN=X+Y + N
$$
so the fast pointer, at the first time meeting the slow pointer, travelled exactly $N$ more.
The chosen answer to the question, explains it!
– Anurag Kapur Mar 07 '13 at 12:39fast
variable, or the "hare" needs to move at twice the speed as tortoise, rather than just one ahead? – devdropper87 Oct 02 '15 at 16:09