File tree Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Expand file tree Collapse file tree 1 file changed +51
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You canโt perform that action at this time.
0 commit comments