Linked Lists: Detect a Cycle

  • + 0 comments

    Clean C++ solution:

    Node* next(Node* node) {
        if (node)
            node = node->next;
        return node;
    }
    
    bool has_cycle(Node* head) {
        Node* slow = next(head);
        Node* fast = next(next(head));
        
        while (slow != fast) {
            slow = next(slow);
            fast = next(next(fast));
        }
        
        return fast;
    }