|
| 1 | +# Intuition |
| 2 | +<!-- Describe your first thoughts on how to solve this problem. --> |
| 3 | +์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ ํ์ด๋ฅผ ์๊ฐํ์์ผ๋, ๋งจ ๋ค์ ์๋ ์์๊ฐ 2๋ฒ์งธ ๊น์ง ์ฅ๊ฑฐ๋ฆฌ ์ด๋ํด์ผ ํ๋ฏ๋ก ๋งจ ๋ค๋ฅผ `O(1)`์ ์ ๊ทผํ๊ธฐ ์ํ ๋ฐฉ๋ฒ(๋ฐฐ์ด์ ๋ ์ฌ๋ฆผ)์ด ํ์ํ ๊ฒ์ด๋ค. |
| 4 | +<!-- Describe your approach to solving the problem. --> |
| 5 | +1. Deque์์ ๋ชจ๋ ๋
ธ๋๋ค์ ์ฝ์
ํ๋ค. |
| 6 | + - ์ฝ๋์์๋ ๋ฐฐ์ด(`nodes`)์ ๋ ์ธ๋ฑ์ค(`i`, `j`)๊ฐ `Deque`์ ์ญํ ์ ๋์ ํ๋ค. |
| 7 | +2. ๋งจ ์, ๋งจ ๋ค์์ ํ๋์ฉ์ ๋บ๋ค. (`f`, `b`) |
| 8 | +3. ๋งจ ์ ์์ ๋ค์ ๋งจ ๋ค ์์๋ฅผ ๋ฃ๋๋ค. (`f` --> `b` -- (๊ธฐ์กด) `f.Next`) |
| 9 | +3. reorder์ดํ ๋งจ ๋ง์ง๋ง ์์์ `nil`์ ์ถ๊ฐํด ์ข
๋ฃ ์ง์ ์ ๋ง๋ ๋ค. |
| 10 | +# Complexity |
| 11 | +- Time complexity: $O(n)$ |
| 12 | + - ๋งํฌ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด `n`์ ๋ํ์ฌ, ๋งํฌ๋๋ฆฌ์คํธ ์ํ์ ๋ฐฐ์ด ์ํ ๋น์ฉ `n`์ด ๋ฐ์ํ๋ค. |
| 13 | +- Space complexity: $O(n)$ |
| 14 | + - ๋งํฌ๋ ๋ฆฌ์คํธ์ ๊ธธ์ด `n`์ ๋ํ์ฌ, ๋ฐฐ์ด(`nodes`) ์์ฑ์ ๋น์ฉ `n`์ด ๋ฐ์ํ๋ค. |
| 15 | +# Code |
| 16 | +## Two Pointer(Deque) |
| 17 | +```go |
| 18 | +func reorderListv1(head *ListNode) { |
| 19 | + nodes := make([]*ListNode, 0, 25) |
| 20 | + for curr := head; curr != nil; curr = curr.Next { |
| 21 | + nodes = append(nodes, curr) |
| 22 | + } |
| 23 | + |
| 24 | + i, j := 0, len(nodes)-1 |
| 25 | + for i < j { |
| 26 | + nodes[j].Next = nodes[i].Next |
| 27 | + nodes[i].Next = nodes[j] |
| 28 | + |
| 29 | + i++ |
| 30 | + j-- |
| 31 | + } |
| 32 | + nodes[i].Next = nil |
| 33 | +} |
| 34 | + |
| 35 | +``` |
| 36 | + |
| 37 | +## ๋ค๋ฅธ ํ์ด |
| 38 | +: ์๋ฃจ์
์ ๋ณด๋ฉฐ ๋ค์ชฝ ์ ๋ฐ์ `reverse()`ํ์ฌ ํด๊ฒฐํ๋ ์๋ฃจ์
์ด ๋์ฑ ์ง๊ด์ ์ผ๋ก ๋๊ปด์ก๋ค. |
| 39 | + |
| 40 | +```go |
| 41 | +func reverse(node *ListNode) *ListNode { |
| 42 | + var prev *ListNode |
| 43 | + curr := node |
| 44 | + for curr != nil { |
| 45 | + next := curr.Next |
| 46 | + curr.Next = prev |
| 47 | + prev = curr |
| 48 | + |
| 49 | + curr = next |
| 50 | + } |
| 51 | + return prev |
| 52 | +} |
| 53 | + |
| 54 | +func reorderList(head *ListNode) { |
| 55 | + slow, fast := head, head |
| 56 | + for fast != nil && fast.Next != nil { |
| 57 | + fast = fast.Next.Next |
| 58 | + slow = slow.Next |
| 59 | + } |
| 60 | + |
| 61 | + curr, rCurr := head, reverse(slow.Next) |
| 62 | + slow.Next = nil |
| 63 | + for curr != nil && rCurr != nil { |
| 64 | + next, rNext := curr.Next, rCurr.Next |
| 65 | + |
| 66 | + rCurr.Next = next |
| 67 | + curr.Next = rCurr |
| 68 | + |
| 69 | + curr, rCurr = next, rNext |
| 70 | + } |
| 71 | +} |
| 72 | + |
| 73 | +``` |
| 74 | +: ์ธ๋ฑ์ค ์กฐ์ ํ๋ ๊ฒ ๊ฝค๋ ์ด๋ ค์์ ์๋ฃจ์
์ ์ฐธ๊ณ ํ๋ค... |
0 commit comments