class ListNode {
constructor(val, next = null) {
this.val = val;
this.next = next;
}
}
// ---- Generate our linked list ----
const linkedList = [5, 4, 3, 2, 1].reduce((acc, val) => new ListNode(val, acc), null);
// ---- Generate our linked list ----
const printList = (head) => {
if(!head) {
return;
}
console.log(head.val);
printList(head.next);
}
// --------- Our solution -----------
var reverseBetween = function(head, left, right) {
let prev = null;
let current = head;
let nodeArr = {};
//[1,2,3,4,5]
//[1,4,3,2,5]
while(current) {
if (current.val == left) {
while(current) {
nodeArr[current.val] = current.next;
if (current.val == right) {
current = current;
prev = null;
for (let node in nodeArr) {
//console.log(nodeArr[node].val-1);
let nextTemp = current.next;
current.next = prev;
prev = current;
current = nextTemp;
}
//console.log("Current Value: " + current.val);
//console.log(nodeArr);
break;
}
let nextTemp = current.next;
current.next = prev;
prev = current;
current = nextTemp;
}
}
let nextTemp = current.next;
current.next = prev;
prev = current;
current = nextTemp;
}
return prev;
};
printList(linkedList);
console.log('after reverse')
printList(reverseBetween(linkedList,2,4))