#include <iostream>
using namespace std;
class List {
public:
List(int num) {
this->num = num;
}
int num;
List* next;
};
//创建链表
List* createList(int count) {
if(count == 0 ) return NULL;
List* list = new List(0);
List* cur = list;
for(int i=1; i < count ; i++) {
cur->next = new List(i);
cur = cur->next;
}
cur->next = NULL;
return list;
}
//遍历
void travelList(List* list) {
List* cur = list;
while(cur != NULL) {
cout<<cur->num<<endl;
cur = cur->next;
}
}
void createLoop(List* list,int num){
List* cur = list;
List* index = list;
while(cur->next != NULL) {
cur = cur->next;
num--;
if(num == 0)
index = cur;
}
cur->next = index;
}
bool hasLoop(List* list){
if(list->next == NULL)
return false;
List* cur1 = list;
List* cur2 = list;
while(true) {
for(int i = 0;i<2;i++) {
if(cur2->next == NULL)
return false;
else {
cur2 = cur2->next;
}
}
if(cur1 == cur2)
return true;
if(cur1->next == NULL)
return false;
else {
cur1 = cur1->next;
}
if(cur1 == cur2)
return true;
}
}
int main(){
List* list = createList(10);
createLoop(list,5);
//travelList(list);
cout<<(hasLoop(list)?"true":"false")<<endl;
return 0;
}
判断链表是否有环
最新推荐文章于 2024-04-07 00:38:45 发布