给出一个链表;
1.判断其是否带环?
2.如果带环求环的长度?
3.求环的入口节点?
解题思路:
用两个指针,快指针一次走两步,慢指针一次走一步,如果两指针相遇,那么链表带环,若两指针不相遇,则链表不带环。
带环的几种情况:
Node* List::find_meet_node(Node* Head)
{
if(Head==NULL)
return NULL;
if(Head->_next ==Head)
return Head;
Node* entry=NULL;
Node* fast=Head;
Node* slow=Head;
while(fast)
{
fast=fast->_next ->_next ;
slow=slow->_next ;
if(fast==slow)
return fast;
}
return NULL;
}
void List::IsHasRing(Node* Head)
{
Node* ret=find_meet_node(Head);
if(ret==NULL)
cout<<"no ring"<<endl;
else
cout<<"have a ring"<<endl;
}
2.求环的长度:<