Prep: Linked List Fully implemented list
Prep algorithm
by bladnman
HTML
<input type=button id="theButton" value="run test" class="runButton">
<div id="log" class="log"></div>
CSS
.runButton {
width: 125px;
margin: 20px;
}
.data {
color: blue;
}
.log {
padding:10px;
margin: 20px;
border: 1px dotted #ccc;
color:#888;
font-face: arial;
font-size:12px;
background: #fbfbfb;
}
JavaScript
runTest();
/* ************************************ */
function runTest() {
var list = new List();
var remToDeleteNode = null;
var remToInserAfterNode = null;
log("add some items in");
for (var i=0; i < 10; i++) {
var node = list.addNode(i);
// rember this node for later
if (i == 2) {
remToDeleteNode = node;
}
// rember this node for later
if (i == 6) {
remToInserAfterNode = node;
}
}
logList(list.getRootNode());
log("get the node at index = 6");
var node6 = list.nodeAtIndex(6);
log("value [<span class='data'>"+ node6.data+"</span>]");
log("now add '100' to the front");
list.insertAsFirst(100);
logList(list.getRootNode());
// remove
log("Let's remove an item");
list.deleteNode(remToDeleteNode);
logList(list.getRootNode());
// remove
log("Insert '500' after another node");
list.insertAfterNode(500, remToInserAfterNode);
logList(list.getRootNode());
// print out values as green
log("Print out the values");
list.each(function (node) {
log(node.data);
});
}
function List() {
var my = this;
var rootNode = null;
var lastNode = null;
my.addNode = function(data) {
// fail fast
if (data == null) {
return null;
}
var node = createNode(data);
if (rootNode == null) {
rootNode = node;
}
if (lastNode != null) {
lastNode.nextRef = node;
}
lastNode = node;
return node;
};
my.insertAsFirst = function(data) {
// fail fast
if (data == null) {
return null;
}
var node = createNode(data);
node.nextRef = rootNode;
rootNode = node;
return node;
};
...