环形链表

    image-20210903112445273.png

    对于单链表来说,指针最后指向null,就说明该链表中没有环,但是如果链表中存在环,那么指针永远不会指向null,成了死循环。这时我们使用快慢指针来解决问题,快慢指针都是从head开始,fast = fast.next.nextslow = slow.next,快指针比慢指针快一倍,如果没有环,fast会先到null;如果有环,fast最终会超slow一圈和慢指针相遇。

    1. boolean hasCycle(ListNode head){
    2. ListNode fast, slow;
    3. fast = slow = head;
    4. //链表是奇数和偶数对fast的判定条件不同
    5. while(fast!=null && fast.next!=null){
    6. fast = fast.next.next;
    7. slow = slow.next;
    8. if(fast == slow) return true;
    9. }
    10. return false;
    11. }