給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
第一步,找環中相匯點。分別用p1,p2指向鍊錶頭部,p1每次走一步,p2每次走二步,直到p1==p2找到在環中的相匯點。
第二步,找環的入口。接上步,當p1==p2時,p2所經過節點數為2x,p1所經過節點數為x,設環中有n個節點,p2比p1多走一圈有2x=n+x;
n=x;可以看出p1實際走了乙個環的步數,再讓p2指向鍊錶頭部,p1位置不變,p1,p2每次走一步直到p1==p2;
此時p1指向環的入口。
publiclistnode entrynodeofloop(listnode phead)
}listnode1=listnode1.next;
listnode2=listnode2.next.next;
if (listnode1==listnode2)
if (listnode1==listnode2)
return
listnode1; }}
} catch
(nullpointerexception e)
return
null
;
}public
class
listnode
}
劍指offer 55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。找環的入口這個問題,其實是建立在另外乙個問題之上的 判斷單向鍊錶是否有環 土方法很多,但是比較好的目前就那麼乙個 一開始設定兩個指標都指向表頭,其中乙個每次 一步 前進乙個節點的叫p1,另外那個每次 一步 前進兩個節點的叫p2...
劍指offer55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。設定塊 慢指標,快指標沒次走兩步,慢指標每次走一步,如果有環,它們一定會相遇 否則快指標會先到最後。相遇後選乙個指標在頭結點,然後與慢指標同時移動,相遇位置就為環入口 走一步和兩步 while slow fast if fas...
劍指offer 55 鍊錶中環的入口結點
給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。時間限制 1秒 空間限制 32768k 熱度指數 144136 本題知識點 鍊錶 見 struct listnode class solution while slow fast 2.計算環內長度 int l 0 dowhil...