题目描述
首刷自解:
bool hasCycle(ListNode* head) {
unordered_set<ListNode*> buckets;
ListNode* ptr = head;
while (ptr != NULL)
{
if (buckets.count(ptr))
return true;
buckets.insert(ptr);
ptr = ptr->next;
}
return false;
}
进阶看解:
bool advanced_hasCycle(ListNode* head) {
ListNode *fast, *slow;
if (head == nullptr || head->next == nullptr)
return false;
fast = head->next;
slow = head;
while (slow != fast)
{
if (fast == nullptr || fast->next == nullptr)
return false;
fast = fast->next->next;
slow = slow->next;
}
return true;
}