// m = start of items to reverse, n = end of item to reverse let reverseBetween = function(head, m, n) { let node = head, result = [], reversed = [], counter = 1; while (node) { let next = node.next; if (counter < m) { result.push(node); //? } if (counter >=m && counter <= n) { node.next = null; reversed.push(node); //? } else if (counter > n) { // all reversals are done // drain reversed into result while (reversed.length) { result.push(reversed.pop()); //? } result.push(node); break; } counter++; node = next; } // if reversals are done at the end of the linkedlist while (reversed.length) { result.push(reversed.pop()); //? } let root = new ListNode(0), tail = root; while (result.length) { tail.next = result.shift(); tail = tail.next; console.log(tail); } return root.next; //? };
Categories