首先判断链表是否环化
我们可以使用一对"快慢指针",快指针每次走两步,慢指针每次走一步,同时从起点出发,依次向后遍历链表,如果两个指针相遇则一定存在环,如果不能相遇则不存在环
实现代码
LNode *fast=L->next,*slow=L->next;//使用快慢指针
while(fast!=NULL&&fast->next!=NULL)
{
slow=slow->next;
fast=fast->next->next;//快指针每次走两步,慢指针每次走一步
if(slow==fast)break;//在x处相遇相遇
}
if(slow==NULL||fast->next==NULL)return NULL;//判断是否环化
寻找环的起点
整体实现代码
#include