Skip to content

Instantly share code, notes, and snippets.

@CarlaTeo
Created May 30, 2021 04:11
Show Gist options
  • Save CarlaTeo/587ff2376f34e55edbb59440dd4ba0ae to your computer and use it in GitHub Desktop.
Save CarlaTeo/587ff2376f34e55edbb59440dd4ba0ae to your computer and use it in GitHub Desktop.
[JS] Reverse linked list even subparts
function reverseLinkedList(head, lastElement = null) {
let prev = lastElement;
let cur = head;
let next = null;
while(cur != lastElement) {
next = cur.next;
cur.next = prev;
prev = cur;
cur = next;
}
return prev;
}
function isEven(num) {
return (num % 2) === 0;
}
function reverse(head) {
let evenHead = null;
let prevEvenHead = null;
let pos = head;
let prev = null;
while(pos) {
if(isEven(pos.data)) {
if(!evenHead) {
evenHead = pos;
prevEvenHead = prev;
}
}
else {
if(evenHead) {
const newHead = reverseLinkedList(evenHead, pos);
if(prevEvenHead) prevEvenHead.next = newHead;
else head = newHead;
evenHead = null;
prevEvenHead = null;
}
}
prev = pos;
pos = pos.next;
}
if(evenHead) {
const newHead = reverseLinkedList(evenHead);
if(prevEvenHead) prevEvenHead.next = newHead;
else head = newHead;
}
return head;
}
class Node {
constructor(x) {
this.data = x;
this.next = null;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment