91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

判斷鏈表是否帶環,若帶環,找到環的入口點

發布時間:2020-06-23 06:40:47 來源:網絡 閱讀:770 作者:小止1995 欄目:編程語言

判斷鏈表是否帶環,若帶環,找到環的入口點

#pragma once
#include<iostream>
using namespace std;
template<class T>
struct LinkNode
{
	T _data;
	LinkNode* _next;
	LinkNode(const T& x)
		:_data(x)
		, _next(NULL)
	{}
};
template<class T>
class ListNode
{
	//為了安全性
private:
	ListNode(const ListNode& l)
	{}
	ListNode<T>& operator=(ListNode l)
	{}
public:
	//程序限制
	LinkNode<T>* _head;
public:
	ListNode()
		:_head(NULL)
	{}
	~ListNode()
	{
		while (_head)
		{
			PopBack();
		}
	}
	void PushBack(const T& x)
	{
		LinkNode<T>* tmp = new  LinkNode<T>(x);
		if (_head == NULL)
			_head = tmp;
		else
		{
			LinkNode<T>* cur = _head;
			while (cur->_next)
				cur = cur->_next;
			cur->_next = tmp;
		}
	}
	void PopBack()
	{
		if (_head == NULL)
			return;
		if (_head->_next == NULL)
		{
			delete _head;
			_head = NULL;
		}
		else
		{
			LinkNode<T>* cur = _head;
			while (cur->_next&&cur->_next->_next)
			{
				cur = cur->_next;
			}
			LinkNode<T>* del = cur->_next;
			cur->_next = NULL;
			delete del;
		}
	}
	LinkNode<T>* Search(const T& x)
	{
		if (_head == NULL)
			return  NULL;
		LinkNode<T>*  cur = _head;
		while (cur->_data != x)
			cur = cur->_next;
		return cur;
	}
};
//判斷鏈表是否帶環
template<typename T>
bool CheckIsCircle(LinkNode<T>* head)
{
	if (head == NULL || head->_next == NULL)
		return false;
	LinkNode<T>* fast, *slow;
	fast = slow = head;
	while (fast&&fast->_next)
	{
		fast = fast->_next->_next;
		slow = slow->_next;
		if (fast == slow)
			return true;
	}
	return false;
}
template<class T>
LinkNode<T>* SearchCircleAccess(LinkNode<T>* head)
{
	if (head == NULL||head->_next==NULL)
		return NULL;
	LinkNode<T>* fast = head;
	LinkNode<T>* slow = head;
	while (fast&&fast->_next)
	{
		fast = fast->_next->_next;
		slow = slow->_next;
		if (fast == slow)
			break;
	}
	slow = head;
	//于是我們從鏈表頭、與相遇點分別設一個指針,
	//每次各走一步,兩個指針必定相遇,且相遇第一點為環入口點。
	//一個從頭走,另一個從相遇點開始在環里走,
	//快指針比慢指針少走x,當它們相遇的第一個節點就是入口點
	while (slow != fast)
	{
		slow=slow->_next;
		fast = fast->_next;
	}
	return slow;
}
void Test1()
{
	ListNode<int> l1;
	l1.PushBack(1);
	l1.PushBack(2);
	l1.PushBack(3);
	l1.PushBack(4);
	l1.PushBack(5);
	l1.PushBack(6);
	l1.PushBack(7);
	l1.PushBack(8);
	l1.PushBack(9);
	(l1.Search(9))->_next = l1.Search(6);//構建環
	if (CheckIsCircle(l1._head))
	{
		cout << (SearchCircleAccess(l1._head))->_data << endl;
	}
}

運行結果:找到的入口點的數據為6

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

电白县| 客服| 寿阳县| 百色市| 东明县| 衡阳县| 汨罗市| 阿坝| 忻城县| 秦皇岛市| 都兰县| 永泰县| 凤山市| 青岛市| 扶绥县| 承德市| 富阳市| 龙山县| 都安| 新绛县| 寿宁县| 广德县| 丽江市| 云龙县| 垫江县| 海南省| 平远县| 辰溪县| 章丘市| 乌拉特中旗| 吴桥县| 大埔区| 新化县| 女性| 桑日县| 荥阳市| 尚义县| 佛山市| 成安县| 永城市| 斗六市|