Leetcode Note: Go - Linked List Cycle
Linked List Cycle - LeetCode
https://leetcode.com/problems/linked-list-cycle/
- Go 言語で取り組んだメモ
所感
- Linked List がサイクルを持つか判定する
回答
[Golang] slow and fast pointer method, Time: O(n), Space: O(1) - LeetCode Discuss
https://leetcode.com/problems/linked-list-cycle/discuss/1355291/Golang-slow-and-fast-pointer-method-Time%3A-O(n)-Space%3A-O(1)
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func hasCycle(head *ListNode) bool {
slow := head
fast := head
for fast != nil && fast.Next != nil {
slow = slow.Next
fast = fast.Next.Next
if slow == fast {
return true
}
}
return false
}
- init:
- slow => head で初期化
- fast => head で初期化
- loop: fast と fast.Next が nil では無ければ継続
- slow に slow.Next を代入
- fast に fast.Next.Next を代入
- slow と fast が等価なら return true
- return false
- loop の回し方がトリッキーだが slow, fast に Next を代入していくことで、継続的に Linked List を回している