环形链表(找到环的入口)

之前已经判断一环形链表是否有环。顺其自然,我们需要找到这个入口在哪。

#include<iostream>

struct ListNode{
	int data;
	ListNode* next;
}

static ListNode* pQuick, pSlowy;		//static功能之一:对其他文件隐藏该变量或函数
static ListNode* pSlowy;


bool isHasCycle(ListNode* phead)
{
	pQuick = pSlowy = head;
	
	while(pQuick->next->next && pSlowy->next)
	{
		if(pQuick == pSlowy)
		{
			return true;
		}
	}
	return false;
}

ListNode* GetInsert(ListNode* phead)
{
	if(isHasCycle(phead))
	{
		pQuick = phead;				//这里是我画图分析的。将快指针放到phead开始的地方,
									//每次走一步。满指针从自己现在的位置每次走一步,两个相交的地方就是环的入口
		while(pQuick->next && pSlowy->next)				
		{
			if(pQuick == pSlowy)
			{
				return pQuick;
			}
		}
	}
}


发布了21 篇原创文章 · 获赞 3 · 访问量 596

猜你喜欢

转载自blog.csdn.net/W96866/article/details/105717359