Arrays and Lists

by kwiliarty

JavaScript

function arrayToList(arr) {
    var output = null;
    for (var i = arr.length - 1; i >= 0; i--) {
        output = {
            value: arr[i],
            rest: output
        }
    }
    return output;
}

function listToArray(list) {
    var output = [];
    for (var node = list; node; node = node.rest) {
        output.push(node.value);
    }
    return output;
}

function prepend(el, list) {
    list = {value: el, rest: list};
    return list;
}

function nth(list, num) {
    var node = list;
    var value;
    for (var i=0; i<=num; i++) {
        if (node) {
            value = node.value;
            node = node.rest;
        } else {
            value = undefined;
            break;
        }
    }
    return value;
}

function nthR(list, nth) {
    if (!list) {
        return undefined;
    }
    if (nth == 0) {
        return list.value;
    }
    return nthR(list.rest, nth -1);
}

var list = arrayToList([10, 20]);
console.log(list);
var arr = listToArray(arrayToList([10, 20, 30]));
console.log(arr);
console.log(prepend(10, prepend(20, null)));
console.log(nth(arrayToList([10, 20, 30]), 0));
console.log(nthR(arrayToList([10, 20, 30]), 2));