共計 973 個字符,預計需要花費 3 分鐘才能閱讀完成。
這篇文章將為大家詳細講解有關 Golang 如何實現單鏈表找環,丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
問題:一個單向鏈表,怎樣怎么檢測是否有環,環的初始節點是什么?
package main
import (
fmt
type ListNode struct {
value int
next *ListNode
func NewListNode(i int) *ListNode { val := new(ListNode)
val.value = i
return val
func main() { a1 := NewListNode(1)
a2 := NewListNode(2)
a3 := NewListNode(3)
a4 := NewListNode(4)
a5 := NewListNode(5)
// 1→2→3→4→5
// ↑????
a1.next = a2
a2.next = a3
a3.next = a4
a4.next = a5
a5.next = a3
head := DetectCycle(a1)
fmt.Println(head.value)
func DetectCycle(head *ListNode) *ListNode {
fast := head
slow := head
for {
if fast.next == nil || slow.next == nil {
break
}
fast = fast.next.next
slow = slow.next
if fast == slow {
// 找到快慢指針相遇點
break
}
}
if fast == nil || slow == nil {
return nil
}
// 找到快慢指針相遇點后,快慢指針一樣的速度移動,找到環的起點
slow = head
for {
if fast == slow {
break
}
fast = fast.next
slow = slow.next
}
return slow
}
關于“Golang 如何實現單鏈表找環”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
正文完