Skip to content

Added Singly LinkedList Implementation #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Aug 4, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
203 changes: 203 additions & 0 deletions Data Structures/Linked List/singlylinklist.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
/* 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

//Creates a LinkedList
function LinkedList(){
//Length of linklist and head is null at start
var length = 0;
var head = null;

//Creating Node with element's value
var Node = function(element){
this.element = element;
this.next = null;
};

//Returns length
this.size = function(){
return length;
};

//Returns the head
this.head = function(){
return head;
};

//Creates a node and adds it to linklist
this.add = function(element){
var node = new Node(element);
//Check if its the first element
if(head === null){
head = node;
}
else {
var currentNode = 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
length++;
};

//Removes the node with the value as param
this.remove = function(element){
var currentNode = head;
var previousNode;

//Check if the head node is the element to remove
if(currentNode.element === element){
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
length--;
};

//Return if the list is empty
this.isEmpty = function(){
return length === 0;
};

//Returns the index of the element passed as param otherwise -1
this.indexOf = function(element) {
var currentNode = 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
this.elementAt = function(index){
var currentNode = head;
var count = 0;
while(count < index){
count++;
currentNode = currentNode.next;
}
return currentNode.element;
};

//Adds the element at specified index
this.addAt = function(index, element){
index--;
var node = new Node(element);

var currentNode = head;
var previousNode;
var currentIndex = 0;

//Check if index is out of bounds of list
if(index > length){
return false;
}

//Check if index is the start of list
if(index === 0){
node.next = currentNode;
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
length++;
};

//Removes the node at specified index
this.removeAt = function(index) {
index--;
var currentNode = head;
var previousNode;
var currentIndex = 0;

//Check if index is present in list
if(index < 0 || index >= length){
return null;
}

//Check if element is the first element
if (index === 0) {
head = currentNode.next;
}
else {
while (currentIndex < index) {
currentIndex++;
previousNode = currentNode;
currentNode = currentNode.next;
}
previousNode.next = currentNode.next;
}

//Decrementing the length
length--;
return currentNode.element;
};

//Function to view the LinkedList
this.view = function () {
var currentNode = head;
var count = 0;
while(count < length){
count++;
console.log(currentNode.element);
currentNode = currentNode.next;
}
};
};

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