
首先设置一个fast一个slow,每次fast移动2个next,slow每次一个
假设head到循环节点是a,循环长度是b+c,在b点slow和fast相遇
相遇这个时候有fast走过=2slow走过,2(a+b)=a+k(b+c)+b
平移得到a-c=(k-1)(b+c)
他们必然会在循环中碰到,碰到之后,slow和head每次加一,slow再运动c就到了循环的头头,这个时候head在a-c点再往后移动的同时slow也会循环一个一个的圈数,这个时候就会在循环的头头相遇,所以返回slow就可以,如果slow和fast永远不相碰就会是返回一个none