问题概述:
简单节点Node
class Node{
public:
Node* next;
};
有长度为N的单链表Node* head, 其尾部节点的next指针不为NULL,而是指向链表的某个节点,构成循环结构。本题要求查找尾部节点所指的循环节点,输出其位置。
解法:
采用Floyd判圈算法,即老师上课讲过的龟兔赛跑与守株待兔的结合(爷青结!!!
代码如下
int find_cycling_position(Node* head){
Node*rab,*tur; //兔子,乌龟
int count=1; //记录结点位置
rab=tur=head; //从起点出发
while(1) {
rab=rab->next->next; //兔子走两步
tur=tur->next; //乌龟走一步
if(rab==tur){
break;
}
}
rab=head; //兔子回到起点
while(rab!=tur){
rab=rab->next; //这次速度相同
tur=tur->next;
count++;
}
return count;
}