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 =...