判断链表是否有环
来源:互联网 发布:十佳网络教育 编辑:程序博客网 时间:2024/06/05 09:14
#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;}