Linked list
var node = {
next: null,
value: null,
create: function(value, next) {
var inst = Object.create(this);
inst.value = value;
inst.next = next;
return inst;
}
};
function createLinkedList(arr) {
var root = node.create(arr[0]);
var item, nextItem;
item = root;
for (var i = 1; i < arr.length; i++) {
nextItem = node.create(arr[i]);
item.next = nextItem;
item = nextItem;
}
return root;
}
function reverse(root) {
var previous, current, next;
current = root;
while (current.next) {
next = current.next;
current.next = previous;
previous = current;
current = next;
}
current.next = previous;
return current;
}
function reverseRecurse(root) {
return reverse(null, root);
function reverse(previous, current) {
var next = current.next;
current.next = previous;
if (!next) return current;
return reverse(current, next);
}
}
function printLinkedList(root) {
var item = root;
while (item) {
console.log(item.value);
item = item.next;
}
}
var list1 = createLinkedList([1, 2, 3, 4, 5]);
var reversed = reverseRecurse(list1);
var reversed = reverse(list1);
printLinkedList(reversed);