JS Linked List

Linked list by JavaScript.

by Tinytsunami

HTML

<div id="demo">
  <input type="text"/>
  <button>Insert</button>
  <button>Remove</button>
  <pre></pre>
</div>

CSS

body {
  color: #ffffff;
  background: #20262e;
  font-family: monospace, sans-serif;
}

#demo input {
  width: 120px;
  color: #ffffff;
  background: #20262e;
  border: none;
  border-bottom: solid 1px #ffffff;
  outline: none;
}

#demo input {
  margin-right: 5px;
}

#demo button {
  cursor: pointer;
  color: #ffffff;
  background: #20262e;
  border: 1px solid #ffffff;
  outline: none;
}

#demo button:hover {
  color: #20262e;
  background: #ffffff;
}

JavaScript

(function(){
  /* Linked list */
	let linkedList = null;
  
  let create = function(data) {
    return {
      data: data,
      next: null
    };
  };

  let sreachPrevious = function (root, value)
  {
    let node = root;
    while(node.next != null && node.next.data != value)
        node = node.next;
    return node;
  };

  let sreach = function (root, value) 
  {
      if(root.data == value)
        return root;
    return sreachPrevious(root, value).next;
  };

  let insert = function (root, data)
  {
    let node = create(data);
    if(root == null)
      return node;
    else
    {
      let tail = root;
      while(tail.next != null)
        tail = tail.next;
      tail.next = node;
      return root;
    }
  };

  let remove = function(root, value)
  {
    let previous = sreachPrevious(root, value);
    let target = previous.next;
    if(target != null)
      previous.next = target.next;
  };

  let traversal = function(root, callback)
  {
    let node = root;
    while(node != null)
    {
       callback.call(this, node, (node.next == null));
       node = node.next;
    }
  };
  
	/* Elements */
  let demo = document.getElementById("demo");
  let inputNode = demo.getElementsByTagName("input")[0];
  let insertNode = demo.getElementsByTagName("button")[0];
  let removeNode = demo.getElementsByTagName("button")[1];
  let preNode = demo.getElementsByTagName("pre")[0];
  
  let rand = function(min, max) {
  	let number = (Math.random() + 1) * max;
  	return Math.floor((number) % (max - min) + min);
  };
  
  let show = function() {
  	while(preNode.firstChild) {
    	preNode.removeChild(preNode.firstChild);
    }
  	traversal(linkedList, function(node, last){
    	let text = `${node.data} ${(last ? '' : '->')} `;
      preNode.appendChild(document.createTextNode(text));
  	});
  };
  
  insertNode.onclick = function() {
  	linkedList = insert(linkedList, inputNode.value);
    inputNode.value = rand(0, 100);
    show();
  };
  
  removeNode.onclick =...