思路
两个指针p1和p2,从链首开始,p1每次走一步,p2每次走两步,一直循环下去。会出现两种情况
1.当p2为NULL时停止,说明无环
2.p2追上p1说明有环
#include <iostream>
using namespace std;
//判断链表是否有环
typedef struct LNode{
int val;
struct LNode *next;
}LNode, *LinkList;
//链表是否有环
int isCircle(LNode L){
LNode *p1=&L, *p2 = &L;
do{
//防止p2每次走两步时对NULL操作
if(p2->next == NULL)
//说明不是环
return 0;
//p2走两步
p2 = (p2->next)->next;
if(p1 == p2)
return 1;
//p1走一步
p1 = p1->next;
}while(p1 != NULL && p2 != NULL);
}