|
| 1 | +/** |
| 2 | + * Definition for singly-linked list. |
| 3 | + * function ListNode(val, next) { |
| 4 | + * this.val = (val===undefined ? 0 : val) |
| 5 | + * this.next = (next===undefined ? null : next) |
| 6 | + * } |
| 7 | + */ |
| 8 | + |
| 9 | +/** |
| 10 | + * ๋ฐฉ๋ฒ 1: ๋ฐ์ผ๋ก ๋๋๊ธฐ + ๋ค์ง๊ธฐ + ํฉ์น๊ธฐ |
| 11 | + * ์๊ฐ ๋ณต์ก๋: O(n) |
| 12 | + * ๊ณต๊ฐ ๋ณต์ก๋: O(1) |
| 13 | + * @param {ListNode} head |
| 14 | + * @return {void} Do not return anything, modify head in-place instead. |
| 15 | + */ |
| 16 | +var reorderList = function (head) { |
| 17 | + if (!head || !head.next) return; |
| 18 | + |
| 19 | + // 1. ์ค๊ฐ ์ง์ ์ฐพ๊ธฐ (slow-fast pointer) |
| 20 | + let slow = head, |
| 21 | + fast = head; |
| 22 | + while (fast.next && fast.next.next) { |
| 23 | + slow = slow.next; |
| 24 | + fast = fast.next.next; |
| 25 | + } |
| 26 | + |
| 27 | + // 2. ๋ท๋ถ๋ถ ๋ฆฌ์คํธ ๋ถ๋ฆฌ ๋ฐ ๋ค์ง๊ธฐ |
| 28 | + let second = slow.next; |
| 29 | + slow.next = null; |
| 30 | + |
| 31 | + let prev = null; |
| 32 | + while (second) { |
| 33 | + let temp = second.next; |
| 34 | + second.next = prev; |
| 35 | + prev = second; |
| 36 | + second = temp; |
| 37 | + } |
| 38 | + |
| 39 | + // 3. ๋ ๋ฆฌ์คํธ ํฉ์น๊ธฐ |
| 40 | + let first = head; |
| 41 | + second = prev; |
| 42 | + while (second) { |
| 43 | + let temp1 = first.next; |
| 44 | + let temp2 = second.next; |
| 45 | + first.next = second; |
| 46 | + second.next = temp1; |
| 47 | + first = temp1; |
| 48 | + second = temp2; |
| 49 | + } |
| 50 | +}; |
| 51 | + |
| 52 | +/** |
| 53 | + * ๋ฐฉ๋ฒ 2: Stack ์ฌ์ฉ |
| 54 | + * ์๊ฐ ๋ณต์ก๋: O(n) |
| 55 | + * ๊ณต๊ฐ ๋ณต์ก๋: O(n) |
| 56 | + * @param {ListNode} head |
| 57 | + * @return {void} Do not return anything, modify head in-place instead. |
| 58 | + */ |
| 59 | +var reorderListStack = function (head) { |
| 60 | + if (!head || !head.next) return; |
| 61 | + |
| 62 | + // ๋ชจ๋ ๋
ธ๋๋ฅผ ์คํ์ ์ ์ฅ |
| 63 | + let stack = []; |
| 64 | + let curr = head; |
| 65 | + while (curr) { |
| 66 | + stack.push(curr); |
| 67 | + curr = curr.next; |
| 68 | + } |
| 69 | + |
| 70 | + // ์์์๋ถํฐ, ๋ค์์๋ถํฐ ๋ฒ๊ฐ์ ์ฐ๊ฒฐ |
| 71 | + let len = stack.length; |
| 72 | + curr = head; |
| 73 | + for (let i = 0; i < Math.floor(len / 2); i++) { |
| 74 | + let last = stack.pop(); |
| 75 | + let temp = curr.next; |
| 76 | + curr.next = last; |
| 77 | + last.next = temp; |
| 78 | + curr = temp; |
| 79 | + } |
| 80 | + curr.next = null; // ๋ง์ง๋ง ๋
ธ๋ ์ฒ๋ฆฌ |
| 81 | +}; |
0 commit comments