給定一個鏈表,返回鏈表開始入環(huán)的第一個節(jié)點。 如果鏈表無環(huán),則返回 null。
為了表示給定鏈表中的環(huán)杰扫,我們使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1膘掰,則在該鏈表中沒有環(huán)章姓。
說明:不允許修改給定的鏈表。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:tail connects to node index 1
解釋:鏈表中有一個環(huán),其尾部連接到第二個節(jié)點凡伊。
示例 2:
輸入:head = [1,2], pos = 0
輸出:tail connects to node index 0
解釋:鏈表中有一個環(huán)零渐,其尾部連接到第一個節(jié)點。
示例 3:
輸入:head = [1], pos = -1
輸出:no cycle
解釋:鏈表中沒有環(huán)窗声。
func detectCycle(head *ListNode) *ListNode {
if head == nil {
return nil
}
var slow, fast *ListNode
slow = head
fast = head
for {
if fast == nil || fast.Next == nil {
break
}
slow = slow.Next
fast = fast.Next.Next
if slow == fast {
slow = head
for {
if slow == fast {
return slow
}
slow = slow.Next
fast = fast.Next
}
}
}
return nil
}