/* SinglyLinkedList!! * A linked list is implar to an array, it hold values. * However, links in a linked list do not have indexes. With * a linked list you do not need to predetermine it's size as * it grows and shrinks as it is edited. This is an example of * a singly linked list. */ //Functions - add, remove, indexOf, elementAt, addAt, removeAt, view // class LinkedList and constructor //Creates a LinkedList var LinkedList = (function () { function LinkedList() { //Length of linklist and head is null at start this.length = 0; this.head = null; } // class node (constructor) //Creating Node with element's value var Node = (function () { function Node(element) { this.element = element; this.next = null; } return Node; }()); //Returns length LinkedList.prototype.size = function () { return this.length; }; //Returns the head LinkedList.prototype.head = function () { return this.head; }; //Creates a node and adds it to linklist LinkedList.prototype.add = function (element) { var node = new Node(element); //Check if its the first element if (this.head === null) { this.head = node; } else { var currentNode = this.head; //Loop till there is node present in the list while (currentNode.next) { currentNode = currentNode.next; } //Adding node to the end of the list currentNode.next = node; } //Increment the length this.length++; }; //Removes the node with the value as param LinkedList.prototype.remove = function (element) { var currentNode = this.head; var previousNode; //Check if the head node is the element to remove if (currentNode.element === element) { this.head = currentNode.next; } else { //Check which node is the node to remove while (currentNode.element !== element) { previousNode = currentNode; currentNode = currentNode.next; } //Removing the currentNode previousNode.next = currentNode.next; } //Decrementing the length this.length--; }; //Return if the list is empty LinkedList.prototype.isEmpty = function () { return this.length === 0; }; //Returns the index of the element passed as param otherwise -1 LinkedList.prototype.indexOf = function (element) { var currentNode = this.head; var index = -1; while (currentNode) { index++; //Checking if the node is the element we are searching for if (currentNode.element === element) { return index + 1; } currentNode = currentNode.next; } return -1; }; //Returns the element at an index LinkedList.prototype.elementAt = function (index) { var currentNode = this.head; var count = 0; while (count < index) { count++; currentNode = currentNode.next; } return currentNode.element; }; //Adds the element at specified index LinkedList.prototype.addAt = function (index, element) { index--; var node = new Node(element); var currentNode = this.head; var previousNode; var currentIndex = 0; //Check if index is out of bounds of list if (index > this.length) { return false; } //Check if index is the start of list if (index === 0) { node.next = currentNode; this.head = node; } else { while (currentIndex < index) { currentIndex++; previousNode = currentNode; currentNode = currentNode.next; } //Adding the node at specified index node.next = currentNode; previousNode.next = node; } //Incrementing the length this.length++; return true; }; //Removes the node at specified index LinkedList.prototype.removeAt = function (index) { index--; var currentNode = this.head; var previousNode; var currentIndex = 0; //Check if index is present in list if (index < 0 || index >= this.length) { return null; } //Check if element is the first element if (index === 0) { this.head = currentNode.next; } else { while (currentIndex < index) { currentIndex++; previousNode = currentNode; currentNode = currentNode.next; } previousNode.next = currentNode.next; } //Decrementing the length this.length--; return currentNode.element; }; //Function to view the LinkedList LinkedList.prototype.view = function () { var currentNode = this.head; var count = 0; while (count < this.length) { count++; console.log(currentNode.element); currentNode = currentNode.next; } }; // returns the constructor return LinkedList; }()); //Implementation of LinkedList var linklist = new LinkedList(); linklist.add(2); linklist.add(5); linklist.add(8); linklist.add(12); linklist.add(17); console.log(linklist.size()); console.log(linklist.removeAt(4)); linklist.addAt(4, 15); console.log(linklist.indexOf(8)); console.log(linklist.size()); linklist.view();