鏈表是否有環(huán)

https://leetcode-cn.com/problems/linked-list-cycle/submissions/
判斷鏈表是否有環(huán) 可以使用hashmap來存儲是否之前有過
但是由于題目要求只能o1的空間復(fù)雜度
所以使用快慢指針來處理該問題

需要注意的幾點corner case,fast及slow node可能為空
如果有環(huán)則slow會追上fast, 如果沒有的話fast.next為空節(jié)點.

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def hasCycle(self, head: ListNode) -> bool:
        slow = head
        if not slow:
            return False
        fast = head.next

        if not (fast and fast.next):
            return False

        while slow != fast and fast and fast.next is not None:
            slow = slow.next
            fast = fast.next.next
        
        if slow == fast:
            return True
        else:
            return False

https://leetcode-cn.com/problems/linked-list-cycle-ii/
獲取環(huán)形鏈表的交叉位置鞋囊,一樣o1的空間復(fù)雜度
這里需要用一點證明
假設(shè)從最開始到交點的距離為x, fast和slow交點為y, 環(huán)剩下的距離為z
因為fast的速度是slow的一倍玫锋,所以fast的路徑長度為slow的的一倍
(x + y)* 2 = x + n(y + z) + y
左右都去掉一個x + y, 則可得 x + y = n(y + z)
x = (y + z)n - y
x = (n-1)(y+z) + z
由于我們知道y+z為一圈寝蹈,所以從相交點走z和從頭開始走x相遇的地方就位環(huán)的相交點

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def detectCycle(self, head: ListNode) -> ListNode:
        current = fast = slow = head
        if not (fast and fast.next):
            return 
        
        # 這里因為slow和fast一樣 所以需要先slow和fast都走一步再循環(huán)往前走
        fast = fast.next.next
        slow = slow.next
        while fast != slow and fast and fast.next:
            fast = fast.next.next
            slow = slow.next
        
        if fast != slow:
            return
        
        while current != fast:
            current = current.next
            fast = fast.next
        
        return current
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末榆骚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浪读,更是在濱河造成了極大的恐慌吊趾,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瑟啃,死亡現(xiàn)場離奇詭異,居然都是意外死亡揩尸,警方通過查閱死者的電腦和手機蛹屿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岩榆,“玉大人错负,你說我怎么就攤上這事∮卤撸” “怎么了犹撒?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長粒褒。 經(jīng)常有香客問我识颊,道長,這世上最難降的妖魔是什么奕坟? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任祥款,我火速辦了婚禮,結(jié)果婚禮上月杉,老公的妹妹穿的比我還像新娘刃跛。我一直安慰自己,他們只是感情好苛萎,可當(dāng)我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布桨昙。 她就那樣靜靜地躺著,像睡著了一般腌歉。 火紅的嫁衣襯著肌膚如雪蛙酪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天究履,我揣著相機與錄音滤否,去河邊找鬼。 笑死最仑,一個胖子當(dāng)著我的面吹牛藐俺,可吹牛的內(nèi)容都是我干的炊甲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼欲芹,長吁一口氣:“原來是場噩夢啊……” “哼卿啡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菱父,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤颈娜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后浙宜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官辽,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年粟瞬,在試婚紗的時候發(fā)現(xiàn)自己被綠了同仆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡裙品,死狀恐怖俗批,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情市怎,我是刑警寧澤岁忘,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站区匠,受9級特大地震影響干像,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辱志,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一蝠筑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧揩懒,春花似錦什乙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至智亮,卻和暖如春忆某,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阔蛉。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工弃舒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓聋呢,卻偏偏與公主長得像苗踪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子削锰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,689評論 2 354

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

  • 給定一個鏈表通铲,判斷鏈表中是否有環(huán): https://leetcode-cn.com/problems/linked...
    洧中葦_4187閱讀 134評論 0 0
  • 小心指針丟失 以單鏈表插入為例: 錯誤的代碼: p->next 指針在完成第一步操作之后,已經(jīng)不再指向結(jié)點 b 了...
    wayyyy閱讀 193評論 0 0
  • 給定一個鏈表器贩,判斷鏈表中是否有環(huán)颅夺。為了表示給定鏈表中的環(huán),我們使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索...
    小王子特洛伊閱讀 164評論 0 0
  • 給定一個鏈表蛹稍,判斷鏈表中是否有環(huán)吧黄。 為了表示給定鏈表中的環(huán),我們使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(...
    快樂的老周閱讀 152評論 0 0
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者唆姐,不喜歡去冒險稚字,但是人生放棄了冒險,也就放棄了無數(shù)的可能厦酬。 ...
    yichen大刀閱讀 6,049評論 0 4