|
| 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