关于带环的链表操作

//判断是否有环
bool isLoop(List plist)
{
	Node *pf = plist;
	Node *ps = plist;
	while(pf != NULL && pf->next != NULL)
	{
		pf = pf->next->next;
		ps = ps->next;
		if(pf == ps)
		{
			break;
		}
	}
	if(pf == NULL || pf->next == NULL)
	{
		return false;
	}
	else
	{
		return true;
	}

}
//环的入口
Node *EnterNode(List plist)
{
	Node *pf = plist;
	Node *ps = plist;
	while(pf != NULL && pf->next != NULL)
	{
		pf = pf->next->next;
		ps = ps->next;
		if(pf == ps)
		{
			break;
		}
	}
	if(pf == NULL || pf->next == NULL)
	{
		return NULL;
	}
	ps = plist;
	while(pf != ps)
	{
		pf = pf->next;
		ps = ps->next;
	}
	if(pf == ps)
	{
		return ps;
	}
	return NULL;
}
int length(List ps)//求环长,传入ps为环的入口
{
	int count=1;
	Node *m=ps->next;
	while(m!=ps)
	{
		m=m->next;
		count++;
	}
	return count;
}

猜你喜欢

转载自blog.csdn.net/qq_41804181/article/details/81221231