Skip to content

Commit ff6d167

Browse files
committed
refactor: 143. Reorder List
1 parent e6e23e6 commit ff6d167

File tree

1 file changed

+34
-24
lines changed

1 file changed

+34
-24
lines changed

reorder-list/gwbaik9717.js

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Time complexity: O(n)
2-
// Space complexity: O(n)
2+
// Space complexity: O(1)
33

44
/**
55
* Definition for singly-linked list.
@@ -13,34 +13,44 @@
1313
* @return {void} Do not return anything, modify head in-place instead.
1414
*/
1515
var reorderList = function (head) {
16-
const nodes = [];
17-
let n = 0;
18-
19-
{
20-
let current = head;
21-
while (current) {
22-
n++;
23-
nodes.push(current);
24-
current = current.next;
25-
}
16+
// middle 찾기
17+
let slow = head;
18+
let fast = slow;
19+
20+
while (fast && fast.next) {
21+
fast = fast.next.next;
22+
slow = slow.next;
23+
}
24+
25+
const middle = slow;
26+
27+
// 후반부 뒤집기 (middle 부터)
28+
let next = null;
29+
let current = middle;
30+
31+
while (current) {
32+
const temp = current.next;
33+
current.next = next;
34+
next = current;
35+
current = temp;
2636
}
2737

28-
const answer = head;
38+
// 합치기
39+
let back = next;
40+
let reordered = head;
2941

30-
{
31-
let current = answer;
32-
for (let i = 1; i < n; i++) {
33-
if (i % 2 !== 0) {
34-
current.next = nodes.at(n - Math.ceil(i / 2));
35-
} else {
36-
current.next = nodes.at(i / 2);
37-
}
42+
while (reordered && back) {
43+
const temp = reordered.next;
3844

39-
current = current.next;
40-
}
45+
reordered.next = back;
46+
back = back.next;
47+
reordered = reordered.next;
4148

42-
current.next = null;
49+
reordered.next = temp;
50+
reordered = reordered.next;
4351
}
4452

45-
return answer;
53+
if (reordered) {
54+
reordered.next = null;
55+
}
4656
};

0 commit comments

Comments
 (0)