Go實現算法:環形鏈表(LeetCode)

題目:給定一個鏈表,判斷鏈表中是否有環。

為了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。

示例 1:

Go實現算法:環形鏈表(LeetCode)

輸入:head = [3,2,0,-4], pos = 1 輸出:true 解釋:鏈表中有一個環,其尾部連接到第二個節點。

示例 2:

Go實現算法:環形鏈表(LeetCode)

輸入:head = [1,2], pos = 0 輸出:true 解釋:鏈表中有一個環,其尾部連接到第一個節點。

示例 3:

Go實現算法:環形鏈表(LeetCode)

輸入:head = [1], pos = -1 輸出:

false 解釋:鏈表中沒有環。

進階:

你能用 O(1)(即,常量)內存解決此問題嗎?

解題思路:最先想到的就是雙指針法,兩個指針相遇的時候就是交點。

/**

* Definition for singly-linked list.

* type ListNode struct {

* Val int

* Next *ListNode

* }

*/

func hasCycle(head *ListNode) bool {

p:=head

for p!=nil && p.Next!=nil && p.Next.Next!=nil{

p=p.Next.Next

head=head.Next

if head==p{

return true

}

}

return false

}

執行用時:8 ms

另一種網上的解法:將節點中的val賦值為特定值,遇到相同的則表示有環

func hasCycle(head *ListNode) bool {

tmp:= -10000

for p:= head;p!=nil;p=p.Next {

if p.Val == tmp {

return true

}

p.Val=tmp

}

return false

}

執行用時: 8ms


分享到:


相關文章: