Skip to content
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
116 changes: 65 additions & 51 deletions Data Structures/Linked List/singlylinklist.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,72 @@

//Functions - add, remove, indexOf, elementAt, addAt, removeAt, view

// class LinkedList and constructor
//Creates a LinkedList
function LinkedList(){
//Length of linklist and head is null at start
var length = 0;
var head = null;
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(element){
this.element = element;
this.next = null;
};
var Node = (function () {
function Node(element) {
this.element = element;
this.next = null;
}
return Node;
}());

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

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

//Creates a node and adds it to linklist
this.add = function(element){
LinkedList.prototype.add = function (element) {
var node = new Node(element);
//Check if its the first element
if(head === null){
head = node;
if (this.head === null) {
this.head = node;
}
else {
var currentNode = head;
var currentNode = this.head;

//Loop till there is node present in the list
while(currentNode.next){
currentNode = currentNode.next;
while (currentNode.next) {
currentNode = currentNode.next;
}

//Adding node to the end of the list
currentNode.next = node;
}
//Increment the length
length++;
this.length++;
};

//Removes the node with the value as param
this.remove = function(element){
var currentNode = head;
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){
head = currentNode.next;
if (currentNode.element === element) {
this.head = currentNode.next;
}
else {

//Check which node is the node to remove
while(currentNode.element !== element) {
while (currentNode.element !== element) {
previousNode = currentNode;
currentNode = currentNode.next;
}
Expand All @@ -74,25 +83,25 @@ function LinkedList(){
}

//Decrementing the length
length--;
this.length--;
};

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

//Returns the index of the element passed as param otherwise -1
this.indexOf = function(element) {
var currentNode = head;
LinkedList.prototype.indexOf = function (element) {
var currentNode = this.head;
var index = -1;

while(currentNode){
while (currentNode) {
index++;

//Checking if the node is the element we are searching for
if(currentNode.element === element){
return index+1;
if (currentNode.element === element) {
return index + 1;
}
currentNode = currentNode.next;
}
Expand All @@ -101,34 +110,34 @@ function LinkedList(){
};

//Returns the element at an index
this.elementAt = function(index){
var currentNode = head;
LinkedList.prototype.elementAt = function (index) {
var currentNode = this.head;
var count = 0;
while(count < index){
while (count < index) {
count++;
currentNode = currentNode.next;
}
return currentNode.element;
};

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

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

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

//Check if index is the start of list
if(index === 0){
if (index === 0) {
node.next = currentNode;
head = node;
this.head = node;
}
else {
while (currentIndex < index) {
Expand All @@ -143,24 +152,25 @@ function LinkedList(){
}

//Incrementing the length
length++;
this.length++;
return true;
};

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

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

//Check if element is the first element
if (index === 0) {
head = currentNode.next;
this.head = currentNode.next;
}
else {
while (currentIndex < index) {
Expand All @@ -172,21 +182,25 @@ function LinkedList(){
}

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

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

// returns the constructor
return LinkedList;

}());

//Implementation of LinkedList
var linklist = new LinkedList();
Expand All @@ -197,7 +211,7 @@ linklist.add(12);
linklist.add(17);
console.log(linklist.size());
console.log(linklist.removeAt(4));
linklist.addAt(4,15);
linklist.addAt(4, 15);
console.log(linklist.indexOf(8));
console.log(linklist.size());
linklist.view();