1
var reorderList = function (head) {
2
const dummyL = new ListNode(-1);
3
const dummyR = new ListNode(-1);
4

5
let currL = dummyL;
6
let currR = dummyR;
7
let past = false;
8

9
let fast = head;
10
let slow = head;
11
while (slow) {
12
if (!fast?.next) {
13
past = true;
14
}
15

16
if (past) {
17
currR.next = slow;
18
currR = slow;
19
} else {
20
currL.next = slow;
21
currL = slow;
22
}
23

24
if (fast) {
25
fast = fast.next?.next || null;
26
}
27
slow = slow.next;
28
}
29
currL.next = null;
30
currR.next = null;
31

32
dummyR.next = reverse(dummyR.next);
33
return merge(dummyL.next, dummyR.next);
34
};
35

36
const merge = (l, r) => {
37
const dummy = new ListNode(-1);
38

39
let currL = l;
40
let currR = r;
41
let last = dummy;
42

43
let count = 0;
44
while (currL && currR) {
45
if (count % 2 === 0) {
46
last.next = currL;
47
last = currL;
48
currL = currL.next;
49
} else {
50
last.next = currR;
51
last = currR;
52
currR = currR.next;
53
}
54

55
count++;
56
}
57

58
last.next = currL || currR;
59
return dummy.next;
60
};
61

62
const reverse = (head) => {
63
let prev = null;
64
let curr = head;
65
while (curr) {
66
const tempPrev = curr.next;
67
curr.next = prev;
68
prev = curr;
69
curr = tempPrev;
70
}
71

72
return prev;
73
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0