給定乙個鍊錶,如何判斷鍊錶是否有環,並且求出環的入口。碰到這個問題,網上的一般做法是採用快慢指標,但是這種方法不易理解,且操作麻煩。
本文採用一種簡單易懂的方式來求解該問題。在求解問題時需要用到map。建立map的形式是map,其中「鍵」表示的是節點的位址,「值「是乙個bool型變數,表示該節點是否被訪問過。**如下:
#include
#include
using
namespace std;
struct node ;}
;//建立帶環鍊錶,入口處的值為3
node*
createlist()
node* p1 = p;
for(
int i =
4; i <
8; i++
) p1-
>next=p;
return head;
}//返回入口處的值
intentry
(node* head)
if(p ==
nullptr
)return-1
;return p-
>data;
}int
main()
如何找到帶環鍊錶的入口節點?
2種思路 首先我們假設有個帶環鍊錶list1,如圖我們可以這麼做 這樣問題就轉換成了如何求出2個不帶環鍊錶的相交節點 很明顯你會問如何在環中找到乙個節點,你不可能去遍歷 會死迴圈 有這樣乙個辦法,我們設定乙個快慢指標first,second,快指標一次走2個節點,慢指標一次走乙個節點,那麼它們最終在...
判斷鍊錶是否帶環,以及環的入口
給出乙個鍊錶,先判斷鍊錶是否帶環,如果帶環,求出環的入口。判斷是否帶環 用快慢指標。快指標每走兩步,慢指標走一步,如果兩者在某個點處相 遇,則鍊錶帶環。下邊給出函式的實現 typedef struct linknode linknode,plinknode typedef struct linkli...
找出帶環單向鍊錶的環入口(交點)
其實這個問題已經被問爛了,但是之前沒有想透,今天算是解決得差不多。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2 p1和...