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();