判斷鍊錶是否有環,入口節點以及環的大小(C )

2021-10-07 16:03:01 字數 906 閱讀 2104

這篇部落格對上述問題有詳細的解釋:判斷鍊錶中是否有環 ----- 有關單鏈表中環的問題

這裡只做c++的乙個**實現,主要包含構建環形鍊錶,判斷是否有環以及環的大小。

#include

#include

using

namespace std;

struct node };

node*

creatcircularlist()

newnode-

>next = ptr-

>next;

ptr-

>next = newnode;

ptr = newnode;

cout <<

"please input a number(0 to entry node, q to quit): ";}

if(sign) ptr-

>next = enternode;

return head-

>next;

}bool

isloop

(node* head)

if(fast == low)

return

true

;else

return

false;}

node*

findenterval

(node* head)

if(fast == low)

return low;

}else

return

nullptr;}

intlooplength

(node* head)

return count;

}int

main()

判斷鍊錶是否有環以及尋找環入口

思路 採用 快慢指標 查檢查鍊錶是否含有環。讓乙個指標一次走一步,另乙個一次走兩步,如果鍊錶中含有環,快的指標會再次和慢的指標相遇。這裡需要注意的一點是演算法中迴圈的條件,這是乙個很容易被忽略的細節。1 因為fast指標比slow指標走得快,所以只要判斷fast指標是否為空就好。由於fast指標一次...

判斷鍊錶是否有環及環的入口

1.如何判斷是否有環?如果有兩個頭結點指標,乙個走的快,乙個走的慢,那麼若干步以後,快的指標總會超過慢的指標一圈。2.如何計算環的長度?第一次相遇 超一圈 時開始計數,第二次相遇時停止計數。3.如何判斷環的入口點 碰撞點p到連線點的距離 頭指標到連線點的距離,因此,分別從碰撞點 頭指標開始走,相遇的...

鍊錶判斷是否存在環以及環的入口

快慢指標的方法 class solution else return false if pfast plow return true return false 快慢指標的方法 分為兩個階段,第一階段先尋找是否有環,第二階段通過快慢指標的回合點找到環的入口。借用leetcode上的圖來說明 首先環的長...