Skip to content

Commit a84c382

Browse files
committed
add Reorder List solution
1 parent f45731b commit a84c382

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

reorder-list/HoonDongKang.ts

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/**
2+
* [Problem]: [143] Reorder List
3+
* (https://leetcode.com/problems/reorder-list/)
4+
*/
5+
6+
class ListNode {
7+
val: number;
8+
next: ListNode | null;
9+
constructor(val?: number, next?: ListNode | null) {
10+
this.val = val === undefined ? 0 : val;
11+
this.next = next === undefined ? null : next;
12+
}
13+
}
14+
15+
/**
16+
Do not return anything, modify head in-place instead.
17+
*/
18+
function reorderList(head: ListNode | null): void {
19+
//시간복잡도 O(n)
20+
//공간복잡도 O(n)
21+
function stackFunc(head: ListNode | null): void {
22+
if (!head || !head.next) return;
23+
24+
const stack: ListNode[] = [];
25+
let node: ListNode | null = head;
26+
27+
while (node) {
28+
stack.push(node);
29+
node = node.next;
30+
}
31+
32+
const length = stack.length;
33+
node = head;
34+
35+
for (let i = 0; i < Math.floor(length / 2); i++) {
36+
const tail = stack.pop()!;
37+
const next: ListNode | null = node.next;
38+
39+
node.next = tail;
40+
tail.next = next;
41+
42+
node = next!;
43+
}
44+
45+
node.next = null;
46+
}
47+
//시간복잡도 O(n)
48+
//공간복잡도 O(1)
49+
function twoPointerFunc(head: ListNode | null): void {
50+
if (!head || !head.next) return;
51+
52+
let slow = head;
53+
let fast = head;
54+
while (fast && fast.next && fast.next.next) {
55+
slow = slow.next!;
56+
fast = fast.next.next;
57+
}
58+
59+
let prev: ListNode | null = null;
60+
let curr = slow.next;
61+
slow.next = null;
62+
63+
while (curr) {
64+
const next = curr.next;
65+
curr.next = prev;
66+
prev = curr;
67+
curr = next;
68+
}
69+
70+
let first = head;
71+
let second = prev;
72+
73+
while (second) {
74+
const tmp1 = first!.next;
75+
const tmp2 = second.next;
76+
77+
first!.next = second;
78+
second.next = tmp1;
79+
80+
first = tmp1!;
81+
second = tmp2;
82+
}
83+
}
84+
}

0 commit comments

Comments
 (0)