Skip to content

Commit eac930d

Browse files
committed
Solution
Linked List Cycle
1 parent bfe247c commit eac930d

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

โ€Žlinked-list-cycle/flynn.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
/**
2+
* ํ’€์ด
3+
* - Floyd's Tortoise and Hare Algorithm์„ ์ด์šฉํ•œ ํ’€์ด์ž…๋‹ˆ๋‹ค.
4+
* ์ฐธ๊ณ : https://en.wikipedia.org/wiki/Cycle_detection#Floyd's_tortoise_and_hare
5+
*
6+
* Big O
7+
* - N: ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
8+
* - L: ๋ฃจํ”„ ๊ตฌ๊ฐ„์— ์†ํ•˜๋Š” ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜
9+
*
10+
* Time Complexity: O(N)
11+
* - ๋ฃจํ”„๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ:
12+
* - fast ํฌ์ธํ„ฐ๊ฐ€ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ์˜ ๋๊นŒ์ง€ ์ด๋™ํ•˜๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
13+
* - ์ด ๋•Œ fast ํฌ์ธํ„ฐ์˜ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
14+
* O(N / 2) = O(N)
15+
* - ๋ฃจํ”„๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ:
16+
* - slow ํฌ์ธํ„ฐ์™€ fast ํฌ์ธํ„ฐ๊ฐ€ ๋ฃจํ”„ ์•ˆ์—์„œ ๋งŒ๋‚˜๋ฉด ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
17+
* - ์ด ๋•Œ slow ํฌ์ธํ„ฐ์˜ ํƒ์ƒ‰ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
18+
* O((N - L) + L * c) (c๋Š” slow๊ฐ€ fast๋ฅผ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณตํ•œ ํšŸ์ˆ˜)
19+
* = O(r + (N - r) * c) (L์€ 0 <= r <= N์ธ r์— ๋Œ€ํ•ด N - r๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)
20+
* = O(N)
21+
*
22+
* Space Complexity: O(1)
23+
* - ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜์— ์ƒ๊ด€์—†์ด ์ผ์ •ํ•œ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
24+
*/
25+
26+
/**
27+
* Definition for singly-linked list.
28+
* type ListNode struct {
29+
* Val int
30+
* Next *ListNode
31+
* }
32+
*/
33+
func hasCycle(head *ListNode) bool {
34+
if head == nil {
35+
return false
36+
}
37+
38+
slow := head
39+
fast := head
40+
41+
for fast != nil && fast.Next != nil {
42+
slow = slow.Next
43+
fast = fast.Next.Next
44+
45+
if slow == fast {
46+
return true
47+
}
48+
}
49+
50+
return false
51+
}

0 commit comments

Comments
ย (0)