簡單方法求解帶環鍊錶的入口(非快慢指標法)

2021-10-07 01:58:06 字數 637 閱讀 5412

給定乙個鍊錶,如何判斷鍊錶是否有環,並且求出環的入口。碰到這個問題,網上的一般做法是採用快慢指標,但是這種方法不易理解,且操作麻煩。

本文採用一種簡單易懂的方式來求解該問題。在求解問題時需要用到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和...