您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Golang如何實現單鏈表找環,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
問題:一個單向鏈表,怎樣怎么檢測是否有環,環的初始節點是什么?
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如何實現單鏈表找環”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。