Linked List stuff

by Andrew Poes

CSS

.print {
    position: relative;
    display: inline-block;
    background-color: black;
    color: white;
    font-family: Helvetica, Helvetica-Neue, sans-serif;
    font-weight: bold;
    font-size: 24px;
    letter-spacing: -1.5px;
    padding: 4px 8px;
}

body {
    background-color: #eeeeee;
}
}

JavaScript

var Node = function() {
    var next;
    var data;
}

$(document).ready(function() {
    var dummyData = [3,5,7,4,1,2]

    var n = new Node()
    n.data = dummyData[0]
    var head = n
    for (var i = 1; i < dummyData.length; ++i) {
        var node = new Node()
        node.data = dummyData[i];
        n.next = node
        n = node
    }

	var value = { node: null, count: 0 }
    nthToLast(head, 3, value)
	var node = nthToLastRet(head, 3)
	traverse(head)
    partition(head, node)
    traverse(head)
})

function traverse(head) {
    var n = head
    var count = 0
    var str = "["
    while (n != null) {
        str += n.data.toString()
        n = n.next
        if (n != null) {
			str += ", "
        }
        else {
            str += "]"
        }
        ++count
    }
    print(str)
}

function nthToLast(head, k, value) {
    k = Math.max(k, 1)
    if (head == null) {
        return 0
    }
    var i = nthToLast(head.next, k, value)
    i += 1
    if (i == k) {
        value.node = head
        value.count = head.data
    }
    return i
}

function nthToLastRet(head, k) {
    var ptr1 = head
    var ptr2 = head
    for (var i = 0; i < k - 1; ++i) {
        if (ptr2.next == null) {
            return null
        }
        ptr2 = ptr2.next
    }
    while(ptr2.next != null) {
        ptr1 = ptr1.next
        ptr2 = ptr2.next
    }
    return ptr1
}

function partition(head, pivot) {
    var pNode = head
    var cNode = head
	var swap = function(a, b) {
        var t = a.data
        a.data = b.data
        b.data = t
    }
    while (cNode != null) {
        if (cNode.data < pivot.data) {
            swap(pNode, cNode)
            pNode = pNode.next
        }
        cNode = cNode.next
    }
    swap(pNode, pivot)
}

function print() {
    var args = Array.prototype.slice.apply(arguments)
    var str = ""
    for (arg of args) {
        str += arg + ", "
    }
    str = str.substring(0, str.length - 2)
    var el = newel(str)
    $("body").append(el)
   ...