方法一:设置两个指针pre,last,慢的跳一步,快的跳两步,往链表末端方向移动,当慢的指针追赶上快的指针的时候说明单向链表有环。
node *pre = head;
node *last = head;
while(pre! = NULL && last != NULL)
{
pre = pre->next->next;
last = pre->next;
if(pre == last)
{
return true;
}
}
return false;
方法二:使用map来记录结点是否被访问,若存在访问两次则说明链表有环。
if(!head)
return false;
node *p = head;
while(p)
{
if(m[p] == 0)
{
m[p] == 1;
}
else if (m[p] == 1)
{
return true;
}
p=p->next;
}