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;
    };
   ...