判断链表是否有环

来源:互联网 发布:十佳网络教育 编辑:程序博客网 时间: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;}

原创粉丝点击