判斷乙個單鏈表中是否存在環 Go

2022-06-07 15:48:14 字數 889 閱讀 1342

鍊錶的乙個結點的結構體如下:

type lnode struct

對於乙個單鏈表,如果他要存在環,那麼至少存在兩個節點,也就是說最後乙個結點的next指向了前面的某個結點。

所以在判斷鍊錶是否存在環的時候,我們新增快慢兩個指標fast和slow,fast指標每次向前走兩步,slow指標每次向前走一步,所以相對來說,fast指標相對slow指標每次向前走了一步。

兩種情況,一種是不存在環,另一種是存在環:

不存在環:

這是乙個單鏈表,如果不存在環,那麼fast指標肯定會先走到鍊錶末尾,此時就說明了鍊錶不存在環

存在環:

fast不會走到鍊錶末尾,因為存在環的鍊錶不存在末尾,此時fast會先走進環中,然後slow會後走進環中,因為fast每次相對slow多走一步,所以當fast和slow都在環中以後,經過某個步數的行走,fast肯定會追上slow,此時就說明了鍊錶存在環

func checklinklistring(l *lnode) bool  else 

slow = slow.next

if fast == slow

} return false

}func main()

l2 := lnode

l3 := lnode

l4 := lnode

l5 := lnode

l6 := lnode

l1.next = &l2

l2.next = &l3

l3.next = &l4

l4.next = &l5

l5.next = &l6

l6.next = &l3

fmt.println(checklinklistring(&l1))

}

判斷乙個單鏈表中是否存在環

判斷乙個單鏈表中是否存在 環。設定兩個指標 fast,slow 初始值都指向頭,slow每次前進1步,fast每次前進2步,大概的思路如下 如果鍊錶存在環,則fast必定先進入環,而slow後進入環,兩個指標必定相遇。如果鍊錶不存在環,則fast必定先指向null,而slow後指向null。如果存在...

判斷乙個單鏈表是否存在環

這是leetcode上面的一道簡單題 141.linked list cycle 大約半個月前刷到的,當時沒想出來,直接看的solution,提到了hash表和快慢指標兩種演算法,覺得好複雜,然後放著沒有去想了。恰好導師有新的idea讓我試下,所以一放就放到現在,今天終於實現了。開薰。這裡記錄兩種方...

單鏈表中判斷是否存在環

有乙個單鏈表,其中可能有乙個環,也就是某個節點的next指向的是鍊錶中在它之前的節點,這樣在鍊錶的尾部形成一環。1 如何判斷乙個鍊錶是不是這類鍊錶?2 如果鍊錶為存在環,如果找到環的入口點?擴充套件 判斷兩個單鏈表是否相交,如果相交,給出相交的第乙個點。有乙個單鏈表,其中可能有乙個環,也就是某個節點...