如何判断链表是否有环
方法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;}