迄今为止看到的最好的原理解释:http://blog.csdn.net/thestoryofsnow/article/details/6822576
#include <iostream>
struct node
{
int data;
node* next;
node(int d)
{
data = d;
next = NULL;
}
};
node* findCycleStart(node* head)
{
node* sp = head;
node* fp = head;
do
{
sp = sp->next;
fp = fp->next->next;
}while(sp != fp);
fp = head;
do
{
fp = fp->next;
sp = sp->next;
}while(sp != fp);
return sp;
};
int main()
{
node* n1 = new node(1);
node* n2 = new node(2);
node* n3 = new node(3);
node* n4 = new node(4);
node* n5 = new node(5);
node* n6 = new node(6);
node* n7 = new node(7);
n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = n6;
n6->next = n7;
n7->next = n4;
node* res = findCycleStart(n1);
std::cout << "Cycle start point: " << res->data;
return 0;
}