单链表有环

141. 环形链表

1.想法:

利用快慢指针,快的指针每次走两个节点,慢的指针每次走一个节点,如果两个指针相遇,那么一定存在环。
原因:如果存在环,那么一定是快指针先进入,而慢指针后进入。且它们之间相距k个节点。
1.K%2 == 0 那么下一步一定是相距K-1(奇数问题)个节点的问题。
2.K %2 == 1那么下一步一定是相距k-1(偶数问题)个节点的问题。
所以所有相距K节点的问题与我们相距0节点问题在本质上是同一个问题。相距0个节点就是相遇了。

2.代码:

public boolean hasCycle(ListNode head) {
        if(head == null||head.next == null)return false;
        else{
            ListNode fast = head;
            ListNode slow = head;
            while(fast!=null&&fast.next!=null){
                fast = fast.next.next;
                slow = slow.next;
                if(fast == slow){
                    return true;
                }
            }
            return false;
        }
    }

你可能感兴趣的:(单链表有环)