链表 141 带环链表

这个题目有点东西,感觉有点难想,官方给的题解是

快慢指针,快指针一次走两步,慢指针一次走一步,当快指针与慢相等时表示有环,

其意思是,快指针一直走在慢指针前面,假若有环,当慢指针进入环后,就可以表示为,快指针慢指针后面,并且在追赶慢指针,当快指针在慢指针后面时,一定有机会相等,因为每一步,快指针都会比慢指针快一步

假设相差一步 会有 2 = 1 + 1

相差两步 会有 2*2 = 2 + 2

相差三步会有 2*3 = 3 + 3

相差k歩就会有 2*k = k + k;

总有一天会相等的

public static boolean hasCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head.next;
        while (fast != null && slow != null) {
            if (fast == slow) {
                return true;
            }
            fast = fast.next.next;
            slow = slow.next;
        }
<pre><code>    return false;
}