Description Link to heading
Solution Link to heading
We can use two pointers, one fast
, one slow
. For each time, fast
move to next next node, slow
move to next node. If there is cycle, fast
will be equal to slow
, or fast
will be nullptr
.
Code Link to heading
class Solution {
public:
bool hasCycle(ListNode *head) {
ListNode *vhead = new ListNode(0, head);
ListNode *fast = vhead, *slow = vhead;
while (fast != nullptr && fast->next != nullptr) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow)
return true;
}
return false;
}
};