Linked List 1

by Matthew Day

JavaScript

class LinkedList {

  constructor() {
    this.length = 0;
    this.head = null;
  }
  
  insert(index, value) {
    if (index < 0 || index > this.length) {
      throw new Error('Index error');
    }
    const newNode = {
      value
    };
    if (index == 0) {
      newNode.next = this.head;
      this.head = newNode;
    } else {
      // Find the node which we want to insert after
      const node = this._find(index - 1);
      newNode.next = node.next;
      node.next = newNode;
    }
    this.length++;
  }
  
  _find(index) {
    let node = this.head;
    for (let i=0; i<index; i++) {
      node = node.next;
    }
    return node;
  }
  
  get(index) {
    if (index < 0 || index >= this.length) {
      throw new Error('Index error');
    }
    console.log(this._find(index).value);
    return this._find(index).value;
  }
  
  remove(index) {
    if (index < 0 || index >= this.length) {
      throw new Error('Index error');
    }
    if (index == 0) {
      this.head = this.head.next;
    } else {
      // Find the node before the one we want to remove
      const node = this._find(index - 1);
      node.next = node.next.next;
    }
    this.length--;
  }

}

var test = new LinkedList();

test.insert(0, "joe");
test.insert(1, "billy");
test.insert(2, "carl");
test.insert(3, "henry");
test.insert(2, "bertha");

test.remove(1);

test.get(2);