Skip to content

Commit cffba1a

Browse files
committed
feat: add linked list cycle solution
1 parent bfe247c commit cffba1a

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

โ€Žlinked-list-cycle/mangodm-web.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
from typing import Optional
2+
3+
4+
# Definition for singly-linked list.
5+
class ListNode:
6+
def __init__(self, x: int) -> None:
7+
self.val = x
8+
self.next = None
9+
10+
11+
class Solution:
12+
def hasCycle(self, head: Optional[ListNode]) -> bool:
13+
"""
14+
- Idea: ์‚ฌ์ดํด์ด ์žˆ๋Š” ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์ธ์ง€ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด ๋‘ ๊ฐœ์˜ ํฌ์ธํ„ฐ, slow์™€ fast๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
15+
slow ํฌ์ธํ„ฐ๋Š” ํ•œ๋ฒˆ์— ํ•œ ์นธ์”ฉ, fast ํฌ์ธํ„ฐ๋Š” ํ•œ๋ฒˆ์— ๋‘ ์นธ์”ฉ ์ด๋™ํ•œ๋‹ค.
16+
๋งŒ์•ฝ ๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๋งŒ๋‚˜๋ฉด, ๋ฆฌ์ŠคํŠธ์— ์‚ฌ์ดํด์ด ์กด์žฌํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•  ์ˆ˜ ์žˆ๋‹ค.
17+
fast๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๋์— ๋„๋‹ฌํ•œ๋‹ค๋ฉด ์‚ฌ์ดํด์ด ์—†๋‹ค๊ณ  ํŒ๋‹จํ•œ๋‹ค.
18+
- Time Complexity: O(n). n์€ ๋ฆฌ์ŠคํŠธ์— ํฌํ•จ๋œ ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜๋‹ค.
19+
์‚ฌ์ดํด์ด ์—†๋Š” ๊ฒฝ์šฐ, fast ํฌ์ธํ„ฐ๋Š” ๋ฆฌ์ŠคํŠธ ๋๊นŒ์ง€ ์ด๋™ํ•œ๋‹ค.
20+
์‚ฌ์ดํด์ด ์žˆ๋Š” ๊ฒฝ์šฐ, ๋‘ ํฌ์ธํ„ฐ๊ฐ€ ๋งŒ๋‚  ๋•Œ๊นŒ์ง€ ์ด๋™ํ•˜๋ฏ€๋กœ O(n)์˜ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.
21+
- Space Complexity: O(1). ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ์™€ ์ƒ๊ด€์—†์ด slow์™€ fast ๋ณ€์ˆ˜๋งŒ ์‚ฌ์šฉ๋˜๋ฏ€๋กœ
22+
์ƒ์ˆ˜ ๊ณต๊ฐ„๋งŒ ์ฐจ์ง€ํ•œ๋‹ค.
23+
"""
24+
slow, fast = head, head
25+
26+
while fast and fast.next:
27+
slow = slow.next
28+
fast = fast.next.next
29+
30+
if slow == fast:
31+
return True
32+
33+
return False

0 commit comments

Comments
ย (0)