因为上一篇文章对这个问题讲解的很详细,这里只给个代码展示:(找出带环单链表的环的第一个节点)
#include<iostream> using namespace std; int length; struct Node { int value; Node* next; }; Node* meetCicleNode=NULL; //快节点和慢节点的相遇节点 Node* firstCileNode=NULL; //环的第一个节点 void createList(Node* &head) //创建一个带环的链表 { int i; Node* current=head; Node* target_Node=NULL; for(i=0;i<length;i++) { Node* temp=(Node*)malloc(sizeof(Node)); temp->value=i; temp->next=NULL; current->next=temp; if(i==5) target_Node=temp;//指定这个节点为环的第一个节点 current=temp; } current->next=target_Node; //链表末端指向中间的一个节点,这样就创建了一个带环单链表 } bool isCicle(Node* head) { Node* fast=head; Node* slow=head; do { if(fast&&slow) { fast=fast->next->next; slow=slow->next; } else { cout<<"不是带环链表"<<endl; return false; } }while(fast!=slow); meetCicleNode=slow; return true; } void findFirstCicleNode(Node* head) { if(isCicle(head)) { Node* first=head; while(first!=meetCicleNode) { meetCicleNode=meetCicleNode->next; first=first->next; } firstCileNode=first; } } void main() { length=10; Node* head=(Node*)malloc(sizeof(Node)); head->value=0; createList(head); findFirstCicleNode(head); cout<<firstCileNode->value<<endl; }