思路:定义一个快指针,一个慢指针,快指针一次走两步,慢指针一次走一步,若链表中有环,快慢指针会指向同一地址
//判断是否有环
bool ring(struct headNode *head)
{
struct node *fast = head->first;
struct node *slow = head->first;
while(fast != NULL && fast->next != NULL)
{
//慢指针每次只移动一步
slow = slow->next;
//快指针每次移动两步
fast = fast->next->next;
//快慢指针相遇,说明有环
if( slow == fast)
{
return true;
}
}
return false;
}