Linked List Cycle II

Approach 1:
1. Have fastRunner and slowRunner as the same in the approach of Linked
List Cycle
2. When there is a cycle in the list, assume from the list head to the
cycle head, there are k steps.
3. When the slowRunner is at the cycle head the first time, the
fastRunner has stepped 2k steps. So the fastRunner is k steps before
slowRunner.
4. Assume the length of the cycle is CYCLE_LENGTH, then actually, the
fastRunner is (k mod CYCLE_LENGTH)=K before the cycle head.
5. So the fastRunner is CYCLE_LENGTH - K steps after the slowRunner.
Since the fastRunner catches up the slowRunner at the pace of 1 step
each time. So after CYCLE_LENGTH - K steps, the fastRunner and the
slowRunner will meet each other.
6. At that point, both of them will be K step before the cycle head.
Call that point as CollisionSpot.
7. Since K = (k mod CYCLE_LENGTH), it is also correct to say that the
CollisionSpot is k steps before the cycle head.
8. So we can have two pointers, one starts from the head of list,
another starts from the CollisionSpot. And both step at the same pace,
1 step each time. Then they will be meet at the cycle head. We can
return that node.