linked list + basic operations
by Diana Lemen
JavaScript
class Node {
constructor(value, index, next = null) {
this.index = index;
this.value = value;
this.next = next;
}
}
class List {
constructor() {
this.head = null;
this.tail = null;
}
addAt(index, value) {
let cur = this.head;
let element;
let prev;
while(cur) {
if (index - cur.index === 1) {
prev = cur;
}
if (cur.index === index) {
element = cur;
}
if (cur.index > index) {
cur.index = cur.index + 1;
}
cur = cur.next;
}
element.index = element.index + 1;
const newNode = new Node(value, index, element);
prev.next = newNode;
}
push(value) {
const newNode = new Node(value, this.tail ? this.tail.index + 1 : 0);
if(!this.head) {
this.head = newNode;
this.tail = newNode;
}
const prevNode = this.tail;
prevNode.next = newNode;
this.tail = newNode;
}
pop() {
let cur = this.head;
let prev;
while(cur) {
if (cur && cur.next && !cur.next.next) {
prev = cur;
}
cur = cur.next;
}
prev.next = null;
}
displayAll () {
let cur = this.head;
while(cur) {
console.log(cur.value)
cur = cur.next;
}
}
}
const list = new List();
const values = [1,2,3,4,5,6,7,8,9,10];
for(let i = 0; i < values.length; i++) {
list.push(values[i]);
}
list.addAt(3, 'a');
list.addAt(4, 'a');
list.addAt(5, 'a');
list.pop();
list.displayAll();