給出乙個鍊錶,先判斷鍊錶是否帶環,如果帶環,求出環的入口。
判斷是否帶環:用快慢指標。快指標每走兩步,慢指標走一步,如果兩者在某個點處相
遇,則鍊錶帶環。
下邊給出函式的實現**:
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每次前進...