Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Note: Do not modify the linked list.
Follow up:
Can you solve it without using extra space?
笨办法就是把每个节点的地址塞入一个set里,每次set之前先find,第一次find到的那就是环的起始位置,这种方法需要额外的set容器。另一种做法仍然是用两根指针,p1每次走一步,p2每次走两步,当p1与p2相遇时,p1走过a步,p2走过b步。b = 2a; b - a = n k; n 为p2在环内转的圈数,k为环的大小,则a = n k;将p1放回起点,与p2再一起每次走一步,再次遇到的点即为换的起点。
1 | /** |