#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;
}
r->next = go;
}
}
void printList(List L) {
ListNode* p = L;
while (p) {
cout << p->val << " ";
p = p->next;
}
}
int searchCircleListEntry(List L) {
int k = 1;
ListNode* index1 = nullptr;;
ListNode* index2 = nullptr;
ListNode* fast = L->next;
ListNode* slow = L->next;
while (fast && fast->next) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow) {
index1 = fast;
index2 = L->next;
while (index1 != index2) {
index1 = index1->next;
index2 = index2->next;
k++;
}
return k;
}
}
}
int main() {
List L = new ListNode;
L->next = NULL;
int n, m;
cout << "请输入链表长度:";
cin >> n;
cout << "请输入链表环入口节点:";
cin >> m;
createCircleList(L, n, m);
cout << "链表入口结点:" << searchCircleListEntry(L);
return 0;
}
0表示无入口结点