用快慢指针的方法判断链表是否有环
// 判断一个单链表是否有环
// 1、用快慢指针分别指向链表首元结点和次元结点
// 2、遍历链表,让快指针走2步,慢指针走1步
// 3、当快指针变为NULL,说明没有环
// 4、当快慢指针能够相遇,说明有环
bool xxx_hasCicle(myNode* head)
{
bool ret = false;
if (head == NULL || head->next == NULL)
{
return ret;
}
myNode* slow = head; // 慢指针
myNode* fast = head->next; // 快指针
// 遍历链表
while (fast != NULL && fast->next != NULL)
{
slow = slow->next;
fast = fast->next->next;
if (slow == fast)
{
ret = true;
break;
}
}
return ret;
}