常见的基本思路类似双人赛跑
A比B跑得快,如果不存在环的话,当他们沿着同样的道路跑步,A将永远碰不到B;但如果是在操场跑的话,A则迟早会遇见B
实现:
定义两个指针,fast和slow,fast每次移动两个结点,slow每次移动一个结点,如果fast和slow相遇,则说明存在环,如果fast->next=null,则说明不存在环
struct listnode{
int data;
listnode* next;
}
listnode* circle(list* head){
listnode* fast,slow;
fast = slow = head;
if(head->next==null){
return NULL;
}
else{
fast=fast->next->next;
while(slow!=NULL&&fast!=NULL){
if(fast==slow){
return fast;
}
else{
if(fast->next==NULL){
return NULL;
}
slow=slow->next;
fast=fast->next->next;
}
}
}
}