Skip to content

Instantly share code, notes, and snippets.

@kshirish
Created August 11, 2024 04:36
Show Gist options
  • Save kshirish/07b9f6b49aa5d9568959b6ac94334ebb to your computer and use it in GitHub Desktop.
Save kshirish/07b9f6b49aa5d9568959b6ac94334ebb to your computer and use it in GitHub Desktop.
// 2 <-> 8 <-> 10 <-> 4 <-> 3 <-> 6 <-> 7
// {prev, value, next}
class Node {
constructor(value) {
this.prev = null;
this.value = value;
this.next = null;
}
}
class DoublyLinkedList {
constructor(mainNode) {
this.headNode = mainNode;
}
add(node) {
let pointer = this.headNode;
while(pointer.next) {
pointer = pointer.next;
}
pointer.next = node;
node.prev = pointer;
}
insert(value, beforeValue) {
let pointer = this.headNode;
const node = new Node(value);
while(pointer.next) {
pointer = pointer.next;
if(pointer.value === beforeValue) {
node.next = pointer.next;
if(pointer.next) {
pointer.next.prev = node;
}
pointer.next = node;
node.prev = pointer;
}
}
}
remove(value) {
let pointer = this.headNode;
while(pointer.next) {
if(pointer.next.value === value) {
pointer.next = pointer.next.next;
if(pointer.next) {
pointer.next.prev = pointer;
}
} else {
pointer = pointer.next;
}
}
}
printAll() {
let pointer = this.headNode;
let str = this.headNode.value;
while(pointer.next) {
pointer = pointer.next;
str += ' <-> ' + pointer.value;
}
console.log(str);
}
}
const headNode = new Node('HEAD'); // {null, 'HEAD', null}
const dll = new DoublyLinkedList(headNode);
dll.add(new Node(2));
dll.add(new Node(8));
dll.add(new Node(10));
dll.add(new Node(4));
dll.add(new Node(3));
dll.add(new Node(6));
dll.add(new Node(7));
dll.printAll();
dll.remove(7);
dll.add(new Node(33));
dll.remove(10);
dll.printAll();
dll.insert(100, 4);
dll.insert(55, 33);
dll.printAll();
dll.add(new Node(1));
dll.printAll();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment