【日拱一卒】鏈表——判斷鏈表是否有環(huán)

需求

判定一個鏈表是否有環(huán)

0704-1-不存在環(huán).png

這張圖不存在環(huán)魂毁,頭結點是1荚藻,尾結點是5。

0704-2-存在環(huán).png

這張圖中啥刻,節(jié)點2-3-4-5-2就構成了環(huán)秃殉。

思路

思路1 ——快慢指針

顧名思義坝初,一個快指針,一個慢指針钾军。

如果不包括環(huán)鳄袍,快慢指針同向行駛,根據小學經典數學題巧颈,他們永遠無法相遇畦木,而且差距只會越來越大。

如果鏈表有環(huán)砸泛,意味著快慢指針都會調頭十籍,好比操場跑步,第一圈快指針在慢指針前面唇礁,但是后面快指針遲早會追上慢指針勾栗。所以可以借助這個思想,使用快慢指針判定是否有環(huán)盏筐。

0704-3-快慢指針.png

圖中围俘,slow代表慢指針,每次只走一步琢融,fast代表快指針界牡,每次走兩步。

第一次:slow停在節(jié)點2漾抬,fast停在節(jié)點3

第二次:slow停在節(jié)點3宿亡,fast停在節(jié)點5

第三次:slow停在節(jié)點4,fast停在節(jié)點3

第四次:slow停在節(jié)點5纳令,fas停在節(jié)點5

至此挽荠,快指針已經”攆上“了慢指針克胳。

代碼實現

func hasCycle(head *ListNode) bool {
    slow := head
    fast := head

    for fast.Next != nil && fast != nil {
        if slow.Val == fast.Val {
            return true
        } else {
            slow = slow.Next
            fast = fast.Next.Next
        }
    }

    return false
}

思路2——另辟蹊徑

遍歷鏈表,如果節(jié)點的值與一個特殊的值不相等圈匆,則將遍歷過的節(jié)點的值設置成一個特殊的值漠另,相當于打標記。

如果鏈表遍歷完跃赚,發(fā)現所有節(jié)點都不等于這個特殊的值笆搓,則判定鏈表無環(huán)。

如果在遍歷的過程中来累,發(fā)現有節(jié)點等于這個特殊的值砚作,則認為有環(huán)。

代碼實現

func hasCycle2(head *ListNode02) bool {
    if head == nil {
        return false
    }

    for head != nil {
        if head.Val == 5201314 {
            return true
        }

        head.Val = 5201314
        head = head.Next
    }

    return false
}

只能說嘹锁,第一個想到這個思路的,腦洞是有多大~

不忘初心

老王:你不好好種地着裹,你以后長大能干什么

小王:學算法

老王:學算法领猾?!你數組骇扇、鏈表摔竿、棧、隊列少孝、堆继低、排序、查找都整不明白稍走,你學什么算法

小王:我只學如何判斷鏈表是否有環(huán)

老王:袁翁。。婿脸。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末粱胜,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子狐树,更是在濱河造成了極大的恐慌焙压,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件抑钟,死亡現場離奇詭異涯曲,居然都是意外死亡,警方通過查閱死者的電腦和手機在塔,發(fā)現死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門幻件,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人心俗,你說我怎么就攤上這事傲武∪鼐裕” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵揪利,是天一觀的道長态兴。 經常有香客問我,道長疟位,這世上最難降的妖魔是什么瞻润? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮甜刻,結果婚禮上绍撞,老公的妹妹穿的比我還像新娘。我一直安慰自己得院,他們只是感情好傻铣,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祥绞,像睡著了一般非洲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蜕径,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天两踏,我揣著相機與錄音,去河邊找鬼兜喻。 笑死梦染,一個胖子當著我的面吹牛,可吹牛的內容都是我干的朴皆。 我是一名探鬼主播帕识,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼车荔!你這毒婦竟也來了渡冻?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忧便,失蹤者是張志新(化名)和其女友劉穎族吻,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體珠增,經...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡超歌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了蒂教。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巍举。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖凝垛,靈堂內的尸體忽然破棺而出懊悯,到底是詐尸還是另有隱情蜓谋,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布炭分,位于F島的核電站桃焕,受9級特大地震影響,放射性物質發(fā)生泄漏捧毛。R本人自食惡果不足惜观堂,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呀忧。 院中可真熱鬧师痕,春花似錦、人聲如沸而账。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泞辐。三九已至腕铸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铛碑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工虽界, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留汽烦,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓莉御,卻偏偏與公主長得像撇吞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子礁叔,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355