博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DS-链表-0002-判断链表是否有环

Posted on 2023-10-25 01:15  乔55  阅读(1)  评论(0编辑  收藏  举报

用快慢指针的方法判断链表是否有环

// 判断一个单链表是否有环
// 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;
}