题目要求
给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 如果链表中存在环,则返回 true 。 否则,返回 false 。
思路
设置快慢指针,快指针一次走两步,慢指针一次走一步,如果有环,快慢指针同时进环后,快指针会追上慢指针,他们的地址会相等。
图解
代码实现
bool hasCycle(struct ListNode *head) {
struct ListNode *fast = head, *slow = head;
while (fast != NULL && fast->next)
{
fast = fast->next->next;
slow = slow->next;
if (fast == slow)
{
return true;
}
}
return false;
}