Javascript Data Structure List Double Linked List

Description

Javascript Data Structure List Double Linked List

function LinkedList(){
  this.head = null;//from w  w w .java 2s.  c o m
}

LinkedList.prototype.insert = function(value) {
  var node = {
    val: value,
    next: null
  }
  if (!(this.head)) {
    this.head = node 
  }
  else {
      currentNode = this.head;
      while (currentNode.next) {
        currentNode = currentNode.next
      }
      currentNode.next = node;
  }
}

LinkedList.prototype.find = function(value) {
  var currentNode = this.head;
  var previousNode = this.head;
  while (currentNode.val !== value && currentNode.next) {
    previousNode = currentNode;
    currentNode = currentNode.next;
  } 
  if (currentNode.val === value) {
    return currentNode;
  } 
}

LinkedList.prototype.remove = function(value) {
  //case 0: no items in linked list
  //case 1: 1st item in linked list - set head = null 
  //case 2: item in linked list between nodes: set next of previous node to node after current
  //case 3: last item in linked list - set previous node next = null
  //case 4: can't find item in linked list

  //check if linked list has items in it
  if (this.head) {
    //case where 1st node needs to be removed
    if (this.head.val === value){
      if (this.head.next) {
        this.head = this.head.next;
      } else {
        this.head = null;
      }
    }
    else {
      var currentNode = this.head;
      var previousNode = this.head;
      while (currentNode.val !== value && currentNode.next) {
        previousNode = currentNode;
        currentNode = currentNode.next;
      }
      if (currentNode.val === value) {
        if (currentNode.next) {
          previousNode.next = currentNode.next;
        } else {
          previousNode.next = null;
        }
      }
    }
  }
}


// Test insert method for LinkedList
var linked_list = new LinkedList();
linked_list.insert("3");
console.log(linked_list.head.val === "3");
console.log(linked_list.head.next === null);
linked_list.insert("4");
console.log(linked_list.head.val === "3");
console.log(linked_list.head.next.val === "4");
console.log(linked_list.head.next.next === null);

// Test remove method for LinkedList
linked_list.insert("5");
linked_list.remove("5");
console.log(linked_list.head.next.next === null)
linked_list.remove("4")
console.log(linked_list.head.next === null)
linked_list.remove("3")
console.log(linked_list.head === null)

// Doubly linked list

function DoubleLinkedList() {
  this.head = null;
}

DoubleLinkedList.prototype.insert = function(value) {
  var node =  {
    val: value,
    next: null,
    prev: null
  }
  if (!(this.head)) {
    this.head = node;
  } else {
    var currentNode = this.head;
    while (currentNode.next) {
      currentNode = currentNode.next;
    }
    currentNode.next = node;
    node.prev = currentNode;
  }
}




DoubleLinkedList.prototype.remove = function(value) {
  //case 0: no items in linked list
  //case 1: 1st item in linked list - set head = null 
  //case 2: item in linked list between nodes: set next of previous node to node after current
  //case 3: last item in linked list - set previous node next = null
  //case 4: can't find item in linked list
  if (this.head) { // must have item in linked list
    if (this.head.val === value){ //removed item is at head
      if (this.head.next) { //other items in list
        this.head.next.prev = null;
        this.head = this.head.next;
      } else { //only 1 item in list
        this.head = null;
      }
    } else { //removed item isn't at head
      var currentNode = this.head;
      while (currentNode.val !== value && currentNode.next) {
        currentNode = currentNode.next;
      }
      if (currentNode.val === value) { //if item is in linked list
        if (currentNode.next) { //reset pointers if item is in between two nodes
          currentNode.prev.next = currentNode.next;
          currentNode.next.prev = currentNode.prev;
        } else { //reset pointers if item is last in linked list
          currentNode.prev.next = null;
        }
      }
    }
  }
}


// Test insert method for double linked list
var double_linked_list = new DoubleLinkedList();
double_linked_list.insert("3");
console.log(double_linked_list.head.val === "3");
console.log(double_linked_list.head.next === null);
console.log(double_linked_list.head.prev === null);
double_linked_list.insert("6");
console.log(double_linked_list.head.next.val === "6");
console.log(double_linked_list.head.next.prev.val === "3");
console.log(double_linked_list.head.prev === null);

// Test remove method for double linked list



PreviousNext

Related