如果乙個鍊錶中包含環,如何找出環的入口節點。
感覺思路比較巧妙,就只說思路。
要找到環,就用兩個指標,乙個一次走乙個節點,乙個一次走兩個節點,如果快的節點能和慢的節點相遇,說明有環,如果快的節點在到達結尾都沒有追到慢節點,說明沒有環。
找到環怎麼找入口呢。只要知道環的元素個數n,讓乙個指標先走n個節點,然後讓另乙個節點從起點開始走。二者相遇的節點就是入口節點。
怎麼知道元素個數n呢。在1的時候兩個節點如果相遇,就肯定是在環中相遇。那麼記錄這個節點,下次指標再經過這個節點的時候就能獲得元素個數。
劍指offer23 鍊錶中環的入口節點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。兩個指標,p1,p2 p1一次走一步,p2一次走兩步。第一次相遇之後開始計數,第二次再相遇時count的值就是環有多少個節點。兩個指標,p1,p2 p1先走count步,然後兩個再同時走,相遇的點就是入口節點。struct l...
劍指offer23 鍊錶中環的入口節點
判斷單鏈表中有沒有環,如果有找到環的入口節點。三個問題 1 如何確定鍊錶中包含環 兩個指標,乙個指標一次走一步,乙個指標一次走兩步。如果走得快的指標追上了走得慢的指標,則說明鍊錶包含環 如果走得快的指標走到了鍊錶末尾 p next null 都沒有追上第乙個指標,則無環。2 如何找到環的入口 定義兩...
劍指offer 23 鍊錶中環的入口節點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出none。思路 1.找相遇點 設定乙個快指標pfast乙個慢指標pslow,先找到乙個相遇點,一定在環中 2.計算環的長度 從相遇點出發,到相遇點結束 1,即為環的長度。3.pfast 從phead 環的長度出發 pslow從phead...