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
Sponsored by #native_company# — Learn More
#native_title#
#native_desc#