forked from AnasImloul/Leetcode-Solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathReorder List.js
74 lines (62 loc) · 1.45 KB
/
Reorder List.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// Runtime: 170 ms (Top 23.07%) | Memory: 50.4 MB (Top 34.29%)
var reorderList = function(head) {
const dummyL = new ListNode(-1);
const dummyR = new ListNode(-1);
let currL = dummyL;
let currR = dummyR;
let past = false;
let fast = head;
let slow = head;
while (slow) {
if (!fast?.next) {
past = true
}
if (past) {
currR.next = slow;
currR = slow;
} else {
currL.next = slow
currL = slow;
}
if (fast) {
fast = fast.next?.next || null;
}
slow = slow.next
}
currL.next = null;
currR.next = null;
dummyR.next = reverse(dummyR.next);
return merge(dummyL.next, dummyR.next);
};
const merge = (l, r) => {
const dummy = new ListNode(-1);
let currL = l;
let currR = r;
let last = dummy;
let count = 0;
while (currL && currR) {
if (count % 2 === 0) {
last.next = currL;
last = currL;
currL = currL.next
} else {
last.next = currR;
last = currR;
currR = currR.next
}
count++
}
last.next = (currL || currR);
return dummy.next;
}
const reverse = (head) => {
let prev = null;
let curr = head;
while (curr) {
const tempPrev = curr.next;
curr.next = prev;
prev = curr;
curr = tempPrev;
}
return prev;
}