#include<iostream>
using namespace std;
typedef struct ListNode {
int val;
struct ListNode* next;
}ListNode, * List;
void createCircleList(List L,int n,int m) {
cout << "请为" << n << "个节点赋值:";
ListNode* r = L;
for (int i = 0; i < n; i++) {
ListNode* p = new ListNode;
cin >> p->val;
p->next = NULL;
r->next = p;
r = r->next;
}
ListNode* go =L;
if (m != -1) {
for (int i = 0; i < m; i++) {
go = go->next;//go指向链表环的入口
}
r->next = go;//让尾结点指向环入口结点,形成闭环
}
}
void printList(List L) {
ListNode* p = L;
while (p) {
cout << p->val << " ";
p = p->next;
}
}
bool hasCycle(List L) {
ListNode* fast = L->next;
ListNode* slow = L->next;
while (fast && fast->next) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow)
return true;
}
return false;
}
int main() {
List L = new ListNode;
L->next = NULL;
int n, m;
cout << "请输入链表长度:";
cin >> n;
cout << "请输入链表环入口节点:";
cin >> m;
createCircleList(L, n, m);
if (hasCycle(L))
cout << "链表有环";
else
cout << "链表无环";
return 0;
}