1var reorderList = function (head) {2const dummyL = new ListNode(-1);3const dummyR = new ListNode(-1);45let currL = dummyL;6let currR = dummyR;7let past = false;89let fast = head;10let slow = head;11while (slow) {12if (!fast?.next) {13past = true;14}1516if (past) {17currR.next = slow;18currR = slow;19} else {20currL.next = slow;21currL = slow;22}2324if (fast) {25fast = fast.next?.next || null;26}27slow = slow.next;28}29currL.next = null;30currR.next = null;3132dummyR.next = reverse(dummyR.next);33return merge(dummyL.next, dummyR.next);34};3536const merge = (l, r) => {37const dummy = new ListNode(-1);3839let currL = l;40let currR = r;41let last = dummy;4243let count = 0;44while (currL && currR) {45if (count % 2 === 0) {46last.next = currL;47last = currL;48currL = currL.next;49} else {50last.next = currR;51last = currR;52currR = currR.next;53}5455count++;56}5758last.next = currL || currR;59return dummy.next;60};6162const reverse = (head) => {63let prev = null;64let curr = head;65while (curr) {66const tempPrev = curr.next;67curr.next = prev;68prev = curr;69curr = tempPrev;70}7172return prev;73};