给定一个链表,判断链表中是否有环。
返回1表示有环,0表示无环
class Solution
{
public:
bool hasCycle(ListNode* head)
{
ListNode* fast = head;
ListNode* slow = head;
int pos = 0;
while (fast)
{
pos++;
if (pos % 2 == 0)
slow = slow->next;
fast = fast->next;
if (fast == slow)
return 1;
}
return 0;
}
};
思路:使用快慢指针,快慢指针都先指向链表第一个结点。然后使用while循环,循环条件为快指针不为空,每次循环先让快指针后移一位,每两次循环让慢指针后移一位,当发现两个指针相同时,说明存在环,否则当while执行完成时,就说明不存在环