思路:直接Floyd判圈法
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {
}
};
ListNode *detectCycle(ListNode *head)
{
//floyd判圈法 先确定是否存在环
if (head == NULL)
return NULL;
ListNode *f = head, *l = head;
while (f->next)
{
f = f->next;
if (f->next)
{
f = f->next;
l = l->next;
if (f == l)
{
break;
}
}
else
{
break;
}
}
if (f->next == NULL)
{
return NULL;
}
//如果存在环
l = head;
while (l != f)
{
l = l->next;
f = f->next;
}
return f;
}