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

2022-08-02 09:12:12 字數 629 閱讀 1804

快慢指標的方法

class solution 

else

return false;

if(pfast == plow)

return true;

}return false;}};

快慢指標的方法:分為兩個階段,第一階段先尋找是否有環,第二階段通過快慢指標的回合點找到環的入口。

借用leetcode上的圖來說明

首先環的長度為c,非環長度為f.

首先慢指標走到0處用了f步,快指標則走到了h處,h = f%c

接著滿指標走\(c-h\)步,則快指標走到了$(2c- 2h + h)%c =c-h $,因此在此處相遇。

第二階段,另外設乙個指標在頭部,向前走f步,相遇點的指標也向前走f步,則位置在\((c-h + f)\%c = 0\),此時相遇。

class solution  

}if(!iscircle) return null;

// second

listnode* pcur = head;

while(pcur != low)

return pcur;}};

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

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

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

給出乙個鍊錶,先判斷鍊錶是否帶環,如果帶環,求出環的入口。判斷是否帶環 用快慢指標。快指標每走兩步,慢指標走一步,如果兩者在某個點處相 遇,則鍊錶帶環。下邊給出函式的實現 typedef struct linknode linknode,plinknode typedef struct linkli...

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

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