Linked List without a single if-statement? - Challenge accepted!
// PoC: Implemented methods: addToTail(value), removeHead() #=> value, contains(value) #=> boolean
var tail = {
next: this,
removeHead: function () {
return null;
},
contains: function (value) {
return false;
},
addToTail: function (value) {
return new Node(value);
}
};
var Node = function (value, next) {
this.value = value;
this.next = next || tail;
};
Node.prototype.addToTail = function (value) {
this.next = this.next.addToTail(value);
return this;
};
Node.prototype.contains = function (value) {
// Ok, condition...
return this.value === value ? true : this.next.contains(value);
};
var LinkedList = function () {
this.head = tail;
};
LinkedList.prototype.addToTail = function (value) {
this.head = this.head.addToTail(value);
};
LinkedList.prototype.removeHead = function () {
var oldHead = this.head;
this.head = oldHead.next;
return oldHead.value;
};
LinkedList.prototype.contains = function (value) {
return this.head.contains(value);
};
//// Example:
var linkedList = new LinkedList();
linkedList.addToTail(1);
linkedList.addToTail(2);
linkedList.addToTail(3);
console.log('true!', linkedList.contains(1));
console.log('true!', linkedList.contains(2));
console.log('true!', linkedList.contains(3));
console.log('1!', linkedList.removeHead());
console.log('false!', linkedList.contains(1));
console.log('true!', linkedList.contains(2));
console.log('true!', linkedList.contains(3));
Ok, there is actually one if-statement in there, but it's still quite elegant.
Written by Alexander Gugel
Related protips
Have a fresh tip? Share with Coderwall community!
Post
Post a tip
Best
#Javascript
Authors
Filed Under
Did you know?
JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.
Security insights from Cside
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#