如何判断链表是否有环
方法1:采用快慢指针
/****************************
* 函数名称:JudgmentLinkRing_1(PtrList list)
* 功能描述:判断链表是否有环
* 传入参数:PtrList list 待判断的链表
* 返回值: true 有环
* false 无环
* 方法:比较快慢指针
***************************/
bool JudgmentLinkRing_1(PtrList list)
{
PtrList p1,p2;
p1 = p2 = list;
while(p1->next != NULL && p2->next->next != NULL)
{
p1 =p1 -> next;
p2 = p2 -> next ->next;
if(p1 == p2)
{
return true;
}
}
return false;
}
方法2:采用比较步数是否相等
/****************************
* 函数名称:JudmentLinkRing_2(PtrList list)
* 功能描述:判断链表是否有环
* 传入参数:PtrList list 待判断的链表
* 返回值: true 有环
* false 无环
* 方法:比较步数
***************************/
bool JudmentLinkRing_2(PtrList list)
{
PtrList p1 = list;
int num1 = 0,num2 = 0;
PtrList p2 = list;
while(p1)
{
while(p2)
{
if(p1 == p2)
{
if(num1 == num2)
{
break;
}
else
{
return true;
}
}
p2 = p2 -> next;
num2++;
}
p1 = p1 -> next;
num1++;
}
return false;
}