方法一:快慢指针法
1.1 自己写的
class Solution
{
public:
bool hasCycle(ListNode* head)
{
if (head == nullptr)
{
return false;
}
ListNode* fast = head;
ListNode* slow = head;
while (fast->next != nullptr)
{
fast = fast->next->next;
slow = slow->next;
if (fast == nullptr)
{
return false;
}
if (fast->next == slow)
{
return true;
}
}
return false;
}
};
1.2:官方给的解法
{
public:
bool hasCycle(ListNode* head)
{
if (head == nullptr || head->next == nullptr)
{
return false;
}
ListNode* fast = head;
ListNode* slow = head;
do
{
if (fast == nullptr || fast->next == nullptr)
{
return false;
}
fast = fast->next->next;
slow = slow->next;
} while (fast != slow);
return true;
}
};
方法二:哈希表