【题目:】
一个链表中包含环,如何找出环的入口结点?例如,在图3.8的链表中, 环的入口结点是结点3。
【代码】
#include<iostream>
//#include<vector>
#include<string>
#include<algorithm>
//#include<stack>
using namespace std;
struct ListNode
{
int value;
ListNode* next;
};
ListNode* MeetingNode(ListNode* head)
{
if (head==nullptr)
{
return NULL;
}
ListNode* slow = head->next;
if (slow==NULL)
{
return NULL;
}
ListNode* fast = slow->next;
while (fast!=NULL&&slow!=NULL)
{
if (fast==slow)
{
return fast;
}
slow = slow->next;
fast = fast->next;
if (fast!=NULL)
{
fast = fast->next;
}
}
return nullptr;
}
ListNode* EntryNodeOfLoop(ListNode* head)
{
ListNode* meetingNode = MeetingNode(head);
if (meetingNode==NULL)
{
return nullptr;
}
int cnt = 1;
ListNode* node = meetingNode->next;
while (node!=meetingNode)
{
cnt++;
node = node->next;
}
ListNode* slow = head;
ListNode* fast = head;
for (int i = 0; i < cnt; i++)
{
fast = fast->next;
}
while (slow!=fast)
{
slow = slow->next;
fast = fast->next;
}
return slow;
}
int main()
{
return 0;
}
/****
***/