判斷鍊錶是否帶環,以及環的入口

2021-09-30 13:54:12 字數 766 閱讀 6334

給出乙個鍊錶,先判斷鍊錶是否帶環,如果帶環,求出環的入口。

判斷是否帶環:用快慢指標。快指標每走兩步,慢指標走一步,如果兩者在某個點處相

遇,則鍊錶帶環。

下邊給出函式的實現**:

typedef struct linknode

linknode,*plinknode;

typedef struct linklist

linklist,*plinklist;

plinknode iscircle(plinklist plist)

plinknode fast = plist->phead;

plinknode slow = plist->phead;

while (fast && fast->next)

return null;

}

如果 如果鍊錶帶環,看下邊的圖:

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

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

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

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

判斷鍊錶是否帶環

有乙個單鏈表,其中可能有乙個環,也就是某個節點的next指向的是鍊錶中在它之前的節點,這樣在鍊錶的尾部形成一環。問題 1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?解答 一 判斷鍊錶是否存在環,辦法為 設定兩個指標 fast,slow 初始值都指向頭,slow每次前進...