//链表是否有环存在
#include <bits/stdc++.h>
using namespace std;
//如果链表有环,寻找环入口位置
struct ListNode
{
int val;
struct ListNode *next;
};
ListNode* detectCycle(ListNode* head)
{
auto slow = head;
auto fast = head;
while(fast && fast->next)
{
slow = slow->next;
fast = fast->next->next;
if(slow == fast)
break;
}
if(!fast || !fast->next)
return NULL;
auto headWalker = head;
auto crossWalker = slow;
while(headWalker != crossWalker)
{
headWalker = headWalker->next;
crossWalker = crossWalker->next;
}
return headWalker;
}
//求环的长度
//第一种方法是利用上面求出的环入口,再走一圈就可以求出长度