Skip to content

Commit 49d1861

Browse files
committed
Reverse Linked List
1 parent 63f9feb commit 49d1861

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
"""
2+
๐Ÿ“š 206. Reverse Linked List
3+
4+
๐Ÿ“Œ ๋ฌธ์ œ ์š”์•ฝ
5+
- ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋ฆฌ์ŠคํŠธ๋ฅผ ๋’ค์ง‘์–ด์„œ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
6+
- ์˜ˆ: 1โ†’2โ†’3โ†’4โ†’5 โ†’ 5โ†’4โ†’3โ†’2โ†’1
7+
8+
๐ŸŽฏ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
9+
- ํŒจํ„ด: ๋ฐ˜๋ณต (Iterative) / ์žฌ๊ท€ (Recursive)
10+
- ์‹œ๊ฐ„๋ณต์žก๋„: O(n)
11+
- ๊ณต๊ฐ„๋ณต์žก๋„: O(1) (๋ฐ˜๋ณต) / O(n) (์žฌ๊ท€ - ์ฝœ์Šคํƒ)
12+
13+
๐Ÿ’ก ํ•ต์‹ฌ ์•„์ด๋””์–ด
14+
1. prev = None, curr = head๋กœ ์‹œ์ž‘
15+
2. ๊ฐ ๋…ธ๋“œ์—์„œ next๋ฅผ ์ €์žฅ โ†’ curr.next๋ฅผ prev๋กœ ๋ณ€๊ฒฝ
16+
3. prev = curr, curr = next๋กœ ์ด๋™
17+
4. curr์ด None์ด ๋˜๋ฉด prev๊ฐ€ ์ƒˆ๋กœ์šด head!
18+
"""
19+
20+
from typing import Optional
21+
22+
23+
class ListNode:
24+
def __init__(self, val=0, next=None):
25+
self.val = val
26+
self.next = next
27+
28+
29+
# ๋ฐ˜๋ณต ๋ฐฉ์‹ (Iterative)
30+
class Solution:
31+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
32+
prev = None
33+
curr = head
34+
35+
while curr:
36+
next_node = curr.next # ๋‹ค์Œ ๋…ธ๋“œ ์ €์žฅ
37+
curr.next = prev # ๋ฐฉํ–ฅ ๋’ค์ง‘๊ธฐ
38+
prev = curr # prev ์ด๋™
39+
curr = next_node # curr ์ด๋™
40+
41+
return prev
42+
43+
44+
# ์žฌ๊ท€ ๋ฐฉ์‹ (Recursive)
45+
class SolutionRecursive:
46+
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
47+
# Base case: ๋นˆ ๋ฆฌ์ŠคํŠธ ๋˜๋Š” ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ
48+
if not head or not head.next:
49+
return head
50+
51+
# ์žฌ๊ท€: ๋‚˜๋จธ์ง€ ๋ฆฌ์ŠคํŠธ ๋’ค์ง‘๊ธฐ
52+
new_head = self.reverseList(head.next)
53+
54+
# ํ˜„์žฌ ๋…ธ๋“œ์˜ ๋‹ค์Œ ๋…ธ๋“œ๊ฐ€ ๋‚˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ํ•จ
55+
head.next.next = head
56+
head.next = None
57+
58+
return new_head
59+

0 commit comments

Comments
ย (0)