Implementation of a Stack without Array - Push and Pop

Stack implementation

by ClarenceDowns

HTML

<p id='output1'></p>
<p id='output2'></p>

JavaScript

var Node = function(_content) {
    this.next = null;
    this.last = null;
    this.content = _content;

  }

  var Stack = function() {
    this.bottom = null;
    this.top = null;
    
    this.push = function(_content) {
      // No head - create one
      if (this.bottom == null) {
        this.bottom = new Node(_content);
        this.top = this.bottom;
        return this;
      }
      
      var addedNode = new Node(_content);
      addedNode.last = this.top;   // pointer to previous node
      this.top.next = addedNode;   // current top points to new
      this.top = addedNode;        // which becomes new top
      return this;
    }

    this.pop = function() {
      if (this.bottom == null) {
        alert("The Stack is Empty");
        return null;
      }
      // Case of one node
      if (this.bottom == this.top) {
      // Exercise for students to implement
      alert("You must implement this case");
      return this.top;
      }
      
      // Now remove top Node
      var a = this.top;   // hold value for return
      this.top = this.top.last;
      this.top.next = null;
      
      return a;
    }

    this.toString = function() {
      var str = "";
      var node = this.bottom;

      while (node != null) {
        str += node.content + ":";
        node = node.next;
      }
      return str;
    }
  }

  // Create a Linked List and Add Nodes
  var stack = new Stack();
  stack.push('A');
  stack.push('B');
  stack.push('C');
  stack.push('D');
  stack.push('E');
	stack.push('F');
  
  document.getElementById('output1').innerHTML =  'Push some nodes ' + stack.toString();
  
  stack.pop();
  stack.pop();
  stack.pop();
  
  document.getElementById('output2').innerHTML = 'Pop some objects: ' + stack.toString();