YSMull
<-- algorithm



原题链接

双指针

public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode p = head;
        ListNode q = head;
        while (p != null && q != null) {
            p = p.next;
            q = q.next;
            if (q == null) return false;    
            q = q.next;
            if (p == q) {
                return true;
            }
        }
        return false;
    }
}

瞎搞

找一个很可能不会出现的数字,把链表的数据破坏掉。
在动态类型语言比如 js 里面,可以给每个路过的节点打个 tag。

public class Solution {
    public boolean hasCycle(ListNode head) {
        while (head != null) {
            if (head.val == 19827453) return true;
            head.val = 19827453;
            head = head.next;
        }
        return false;
    }
}