1
function getListSize(head) {5
while (curr !== null) {14
function splitInHalf(head, n) {18
for (let i = 0; i < Math.floor(n / 2) - 1; i++) {22
const node2 = curr.next;25
return [node1, Math.floor(n / 2), node2, n - Math.floor(n / 2)];28
function merge(head1, head2) {29
if (head1.val > head2.val) {30
return merge(head2, head1);36
let runner1 = curr.next;39
while (runner1 !== null || runner2 !== null) {40
const runner1Value = runner1 ? runner1.val : Infinity;41
const runner2Value = runner2 ? runner2.val : Infinity;43
if (runner1Value < runner2Value) {45
runner1 = runner1.next;48
runner2 = runner2.next;58
var sortList = function (head) {59
const size = getListSize(head);61
function mergeSort(node, n) {66
const [node1, n1, node2, n2] = splitInHalf(node, n);67
const [merged1, merged2] = [mergeSort(node1, n1), mergeSort(node2, n2)];69
return merge(merged1, merged2);72
return mergeSort(head, size);