快慢指针

始终先快指针走两步,然后判断是否相遇,如果相遇则返回true
若没有相遇,则慢指针向前走一步,一直循环,直到相遇或者快指针等于空为止。

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