算法 判断单链表是否有环 快慢指针法

class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode* fast=head,* slow=head;
        while(fast&&fast->next)
        {
            fast=fast->next->next;
            slow=slow->next;
            if(fast==slow)
            {
                return true;
            }
        }
        return false;
    }
};

思路:准备两个指针fast和slow,循环链表,slow指针初始也指向head,每次循环向前走一步,fast指针初始指向head,每次循环向前两步,如果没有环,则快指针会抵达终点,如果有环,那么快指针会追上慢指针
复杂度:时间复杂度O(n),空间复杂度O(1)

上一篇:Montgomery


下一篇:算法 - DNA搜索 - Ako Corasick