鏈表 - 判斷鏈表是否有環(huán)以及環(huán)的入口

給一個鏈表账蓉,若其中包含環(huán)枚碗,請找出該鏈表的環(huán)的入口結(jié)點,否則剔猿,輸出null视译。

一. 什么是鏈表的環(huán)?

單鏈表出現(xiàn)循環(huán)的情況就是鏈表的環(huán)归敬。
所以酷含,尋找環(huán)的入口就是找到循環(huán)開始的地方。

二. 解決方案

  • 快慢指針
    • 理解該方法需要我們推導(dǎo)一條原理
    • 如圖所示汪茧,x為鏈表入口到環(huán)入口的距離椅亚,y為環(huán)入口到快慢指針相遇點的距離,z為相遇點到環(huán)入口的距離舱污。
    • 同時呀舔,環(huán)的總長度為L,即L = y + z扩灯。
    • 設(shè)置快指針媚赖,每次走2個節(jié)點,記為2S珠插。
    • 設(shè)置慢指針惧磺,每次走1個節(jié)點,記為1S捻撑。


    • 化簡得到:x = (n - 1)L + z 磨隘。
    • 其中n是快指針比慢指針多走的循環(huán)數(shù)缤底,當n = 1時,x = z番捂,也就是說个唧,當快指針只比慢指針多走一圈就相遇的話,鏈表入口到環(huán)入口的距離=相遇點到環(huán)入口的距離设预。當n != 1 時徙歼,道理一樣,只不過快指針跑多幾圈而已絮缅。
    • 正是基于上面的結(jié)論鲁沥,可以在快慢指針第一次相遇的地方重置快指針的位置,使快指針回到鏈表入口耕魄,慢指針不動。然后彭谁,兩個指針以相同的速度在運動吸奴,再次相遇的地方就是環(huán)入口。
function EntryNodeOfLoop(pHead)
{
    let fast = pHead;
    let slow = pHead;
    while(fast && fast.next){
        fast = fast.next.next;// 快指針一次走兩步
        slow = slow.next;// 慢指針一次走一步
        if(fast == slow){ // 第一次相遇重置快指針的位置以及速度
            fast = pHead;
            while(fast != slow){
                fast = fast.next;
                slow = slow.next;
            }
            return fast;// 再次相遇的地方就是環(huán)入口
        }
    }
    return null;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末缠局,一起剝皮案震驚了整個濱河市则奥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狭园,老刑警劉巖读处,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異唱矛,居然都是意外死亡罚舱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門绎谦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來管闷,“玉大人,你說我怎么就攤上這事窃肠“觯” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵冤留,是天一觀的道長碧囊。 經(jīng)常有香客問我,道長纤怒,這世上最難降的妖魔是什么糯而? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮肪跋,結(jié)果婚禮上歧蒋,老公的妹妹穿的比我還像新娘土砂。我一直安慰自己,他們只是感情好谜洽,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布萝映。 她就那樣靜靜地躺著,像睡著了一般阐虚。 火紅的嫁衣襯著肌膚如雪序臂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天实束,我揣著相機與錄音奥秆,去河邊找鬼。 笑死咸灿,一個胖子當著我的面吹牛构订,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播避矢,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼悼瘾,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了审胸?” 一聲冷哼從身側(cè)響起亥宿,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砂沛,沒想到半個月后烫扼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碍庵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年映企,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怎抛。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡卑吭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出马绝,到底是詐尸還是另有隱情豆赏,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布富稻,位于F島的核電站掷邦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏椭赋。R本人自食惡果不足惜抚岗,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望哪怔。 院中可真熱鬧宣蔚,春花似錦向抢、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亩冬,卻和暖如春艘希,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背硅急。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工覆享, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人营袜。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓撒顿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荚板。 傳聞我的和親對象是個殘疾皇子核蘸,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 題意:給定一個單向鏈表,求判斷該鏈表是否為帶環(huán)鏈表并求出該環(huán)的入口點 來源地址:Chasiny 例如下圖啸驯,一個帶環(huán)...
    Chasiny閱讀 803評論 0 2
  • 題目描述 在一個排序的鏈表中,存在重復(fù)的結(jié)點祟峦,請刪除該鏈表中重復(fù)的結(jié)點罚斗,重復(fù)的結(jié)點不保留,返回鏈表頭指針宅楞。 例如针姿,...
    Mereder閱讀 5,221評論 0 2
  • 給一個鏈表,若其中包含環(huán)厌衙,請找出該鏈表的環(huán)的入口結(jié)點距淫,否則,輸出null婶希。 分析:如何判斷有環(huán)榕暇?如何找到環(huán)的入口節(jié)...
    ShawnCaffeine閱讀 3,645評論 2 2
  • 搞懂單鏈表常見面試題 Hello 繼上次的 搞懂基本排序算法,這個一星期喻杈,我總結(jié)了彤枢,我所學(xué)習和思考的單鏈表基礎(chǔ)知識...
    醒著的碼者閱讀 4,577評論 1 45
  • 題目:如何判斷一個單鏈表是否有環(huán)?若有環(huán)筒饰,如何找出環(huán)的入口節(jié)點缴啡。 一、單鏈表是否有環(huán) 思路分析: 單鏈表有環(huán)瓷们,是指...
    sherrysack閱讀 691評論 0 0