Created
March 12, 2012 19:02
-
-
Save wesleyhales/2023993 to your computer and use it in GitHub Desktop.
JavaScript LinkedList Example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//I wanted a more elegant linkedlist example than the others, so purely for academic purposes I created one. | |
var LinkedList = function(e){ | |
var that = {}, first, last; | |
that.push = function(value){ | |
var node = new Node(value); | |
if(first == null){ | |
first = last = node; | |
}else{ | |
last.next = node; | |
last = node; | |
} | |
}; | |
that.pop = function(){ | |
var value = first; | |
first = first.next; | |
return value; | |
}; | |
that.remove = function(index) { | |
var i = 0; | |
var current = first, previous; | |
if(index === 0){ | |
//handle special case - first node | |
first = current.next; | |
}else{ | |
while(i++ < index){ | |
//set previous to first node | |
previous = current; | |
//set current to the next one | |
current = current.next | |
} | |
//skip to the next node | |
previous.next = current.next; | |
} | |
return current.value; | |
}; | |
var Node = function(value){ | |
this.value = value; | |
var next = {}; | |
}; | |
return that; | |
}; | |
var linkedList = new LinkedList(); | |
linkedList.push(1); | |
linkedList.push(2); | |
linkedList.push(3); | |
linkedList.push(4); | |
linkedList.remove(0); | |
console.log(linkedList.pop()); | |
console.log(linkedList.pop()); | |
console.log(linkedList.pop()); |
var next = {};
is unused.
var list = function (e) {
var self = this;
var first, last, head;
self.insert = function (value) {
var node = new Node(value);
if (first == null) {
first = last = node;
} else {
var head = first;
while (head.next != null) {
head = head.next;
}
head.next = node;
last = head.next;
}
}
self.show = function () {
var head = first;
while (head != null) {
console.log(head.value);
head = head.next;
}
}
self.remove = function (value) {
var found = false;
var head = first;
while (head != null) {
if (first.value == value) {
prev = head = first = first.next;
found = true;
} else {
if (head.value == value) {
found = true;
prev.next = head.next;
}
prev = head;
head = head.next;
}
}
if (!found) {
console.log("#" + value + " not found");
}
}
self.update = function (value, newValue) {
var head = first;
while (head != null) {
if (head.value == value) {
head.value = newValue;
}
head = head.next;
}
}
var Node = function (value) {
this.value = value;
var next = {};
}
return self;
};
var list = new list();
list.insert(1);
list.insert(2);
list.insert(3);
list.insert(4);
list.show();
console.log("____________________________");
list.update(2, 5);
list.show();
console.log("____________________________");
list.remove(3);
list.show();
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Your
that = {}
and usage ofnew
is confusing intention. Should probably be eitherthat = this
or justlist = LinkedList();