[每日一題]142.Linked List Cycle II(鏈表)

1.這是一個(gè)判斷 鏈表中是否有環(huán) 的題目.是昨天那個(gè)題目的衍生要尔,判斷環(huán)在哪個(gè)地方.

鏈接:https://leetcode.com/problems/linked-list-cycle-ii/

142. Linked List Cycle II.JPG

題目的意思就是輸入一個(gè)鏈表看峻,然后判斷鏈表是否構(gòu)成了環(huán)狀結(jié)構(gòu)片酝,并且找出環(huán)結(jié)構(gòu)的位置雕擂。

這里有兩個(gè)思路解決這個(gè)問(wèn)題:

**
1.使用鍵值對(duì)绽榛,記錄這個(gè)Node,發(fā)現(xiàn)相同直接返回這個(gè)值就可以了。ps:其實(shí)集合(Set就可以接剩,插入錯(cuò)誤,直接判斷有環(huán))
2.使用長(zhǎng)短指針的思路萨咳。先判斷是否有環(huán)懊缺,然后根據(jù)相關(guān)信息計(jì)算出環(huán)的位置,下面詳細(xì)解釋培他。**

2.題解:

給出以上兩個(gè)思路的代碼:
思路1:

class Solution:
    # 2- 使用字典記錄
    def hasCycle(self, head):
        dict_list = {}
        i = 0
        node = head
        while node:
            if node in dict_list:
                return "tail connects to node index " + str(dict_list[node]) # 這里可以直接返回在哪個(gè)節(jié)點(diǎn)形成環(huán)
            else:
                dict_list[node] = i  # 記錄鍵值對(duì)
                i += 1
                node = node.next
        return "no cycle"

思路3:
詳細(xì)解釋:
1.首先通過(guò)長(zhǎng)短指針判斷是否有環(huán)鹃两,如果有的執(zhí)行下一步,沒(méi)有的話舀凛,返回“no cycle”
2.假設(shè) 到入口的距離是H俊扳,環(huán)的長(zhǎng)度是C,第一次相遇的位置是D猛遍。
因此馋记,慢指針的距離是

dis_slow = H+mC+D,m為自然數(shù)

快指針的距離是

dis_fast = H+nC+D懊烤,m為自然數(shù)

因?yàn)榭熘羔樳\(yùn)動(dòng)的步長(zhǎng)是慢指針的兩倍抗果,因此,得到以下的這個(gè)公式奸晴。

2*dis_slow = dis_fast 
H = (n-2m)C - D

將n-2m用k代替

H =kC - D

3.讓慢指針回到head節(jié)點(diǎn)冤馏,和fast同時(shí)以步長(zhǎng)為1的速度跑。此時(shí)寄啼,等他們兩相遇時(shí)候逮光,慢節(jié)點(diǎn)運(yùn)動(dòng)H,快節(jié)點(diǎn)運(yùn)動(dòng)KC-D的長(zhǎng)度墩划。此時(shí)返回H節(jié)點(diǎn)位置即可涕刚。

畫(huà)圖解釋:


142. Linked List Cycle II.JPG
  # 3- 使用長(zhǎng)短指針記錄
    def hasCycle(self, head):
        # 1.判斷是否有環(huán)
        try:
            fast = head.next.next
            slow = head.next
            while slow != fast:
                slow = slow.next
                fast = fast.next.next
        except:
            return "no cycle"
        # 2 根據(jù)公式計(jì)算出對(duì)應(yīng)的環(huán)開(kāi)始的位置
        slow = head
        i = 0
        while slow is not fast:
            slow, fast = slow.next, fast.next
            i += 1
        return "tail connects to node index " + str(i)

不過(guò)這一題,有個(gè)坑乙帮,這個(gè)不是直接返回字符串杜漠,而是返回,None或者節(jié)點(diǎn).

3.完整代碼

查看鏈接:
https://github.com/Wind0ranger/LeetcodeLearn/edit/master/1-List/142-Linked-List-Cycle-II.py

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末察净,一起剝皮案震驚了整個(gè)濱河市驾茴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌氢卡,老刑警劉巖锈至,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異译秦,居然都是意外死亡峡捡,警方通過(guò)查閱死者的電腦和手機(jī)击碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)们拙,“玉大人稍途,你說(shuō)我怎么就攤上這事⊙馄牛” “怎么了晰房?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)射沟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)与境,這世上最難降的妖魔是什么验夯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮摔刁,結(jié)果婚禮上挥转,老公的妹妹穿的比我還像新娘。我一直安慰自己共屈,他們只是感情好绑谣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著拗引,像睡著了一般借宵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矾削,一...
    開(kāi)封第一講書(shū)人閱讀 51,462評(píng)論 1 302
  • 那天壤玫,我揣著相機(jī)與錄音,去河邊找鬼哼凯。 笑死欲间,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的断部。 我是一名探鬼主播猎贴,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蝴光!你這毒婦竟也來(lái)了她渴?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蔑祟,失蹤者是張志新(化名)和其女友劉穎惹骂,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體做瞪,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡对粪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年右冻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片著拭。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纱扭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出儡遮,到底是詐尸還是另有隱情乳蛾,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布鄙币,位于F島的核電站肃叶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏十嘿。R本人自食惡果不足惜因惭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绩衷。 院中可真熱鬧蹦魔,春花似錦、人聲如沸咳燕。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)招盲。三九已至低缩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間曹货,已是汗流浹背表制。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留控乾,地道東北人么介。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜕衡,于是被迫代替她去往敵國(guó)和親壤短。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

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