這篇文章將為大家詳細(xì)講解有關(guān)Golang如何實現(xiàn)單鏈表找環(huán),小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
10年積累的做網(wǎng)站、成都網(wǎng)站設(shè)計經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站制作后付款的網(wǎng)站建設(shè)流程,更有濂溪免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
問題:一個單向鏈表,怎樣怎么檢測是否有環(huán),環(huán)的初始節(jié)點是什么?
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 } // 找到快慢指針相遇點后,快慢指針一樣的速度移動,找到環(huán)的起點 slow = head for { if fast == slow { break } fast = fast.next slow = slow.next } return slow }
關(guān)于“Golang如何實現(xiàn)單鏈表找環(huán)”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。