怎么判断链表中是否有环
思想为:设置两个指针,一个步长为1,另一个步长为2,依次后移,如果相遇且都不为空,则有环。
与这个类似的问题包括:怎么快速检测出一个巨大的链表中的死链?或者如何找出一个单链表的中间节点?
代码为:
bool loop(node* head)
{
bool flag = true;
if (head == NULL)
{
flag = false;
}
node* one = head;
node* two = head->next;
if (two == NULL)
{
flag = false;
}
while (one != two)
{
if (one != NULL)
{
one = one->next;
}
if (two != NULL)
{
two = two->next;
}
if (two == NULL)
{
break;
}
two = two->next;
if (one == NULL || two == NULL)
{
break;
}
}
if (one == NULL || two == NULL)
{
flag = false;
}
return flag;
}