Core JavaScript

A Circular Linked List

This JavaScript Reference section displays the code for an example program that shows how to create a circular linked list in JavaScript.

CircularLinkedList.html

<!DOCTYPE html>
<html>
	<head>
	    <title>XoaX.net's Javascript</title>
	    <script type="text/javascript" src="CircularLinkedList.js"></script>
	</head>
	<body onload="fnInitialization()">
	    <p id="idOutput"></p>
    	<div id="idCol1" style="padding:0px;float:left;"></div>
    	<div id="idCol2" style="padding:0px 20px;float:left;"></div>
	</body>
</html>

CircularLinkedList.js

// The Link Constructor
function CLink(qData) {
  this.mqData = qData;
  this.mqpNext = this;
}

// The Circular Linked List Constructor
function CCircularLinkedList() {
  this.mqpTail = null;
  this.mfnInsertAtHead = function(qData) {
	var qNewLink = new CLink(qData);
	if (!this.mfnIsEmpty()) {
		qNewLink.mqpNext = this.mqpTail.mqpNext;
		this.mqpTail.mqpNext = qNewLink;
	} else {
		this.mqpTail = qNewLink;
	}
  }
  this.mfnInsertAtTail = function(qData) {
	var qNewLink = new CLink(qData);
	if (!this.mfnIsEmpty()) {
		qNewLink.mqpNext = this.mqpTail.mqpNext;
		this.mqpTail.mqpNext = qNewLink;
	}
	this.mqpTail = qNewLink;
  }
  this.mfnRemoveAtHead = function() {
    if (this.mfnIsEmpty()) {
      return false;
    } else if (this.mqpTail.mqpNext == this.mqpTail)  {
      this.mqpTail = null;
    } else {
      this.mqpTail.mqpNext = this.mqpTail.mqpNext.mqpNext;
	}
	return true;
  }
  this.mfnIsEmpty = function() {
    return (this.mqpTail == null);
  }
  this.mfnHead = function() {
	  return (this.mfnIsEmpty() ? null : this.mqpTail.mqpNext);
  }
}

// The Stack Constructor
function CStack() {
  this.mqList = new CCircularLinkedList();
  this.mfnPush = function(qData) {
    this.mqList.mfnInsertAtHead(qData);
  }
  this.mfnPop = function() {
	var qPopped = this.mqList.mfnHead();
    this.mqList.mfnRemoveAtHead();
    return qPopped.mqData;
  }
  this.mfnIsEmpty = function() {
    return this.mqList.mfnIsEmpty();
  }
}

// The Queue Constructor
function CQueue() {
  this.mqList = new CCircularLinkedList();
  this.mfnPush = function(qData) {
    this.mqList.mfnInsertAtTail(qData);
  }
  this.mfnPop = function() {
	var qPopped = this.mqList.mfnHead();
    this.mqList.mfnRemoveAtHead();
    return qPopped.mqData;
  }
  this.mfnIsEmpty = function() {
    return this.mqList.mfnIsEmpty();
  }
}

function fnInitialization() {
	var saTribes = ["Reuben", "Simeon", "Levi", "Judah", "Issachar",
    "Zebulun", "Dan", "Naphtali", "Gad", "Asher", "Joseph", "Benjamin"];
    var qStack = new CStack();
    var qQueue = new CQueue();
	var qpPrint = document.getElementById("idOutput");
	qpPrint.innerHTML = "";

	// Print the tribes in the order of the array entries.
	for(var sCurrTribe of saTribes){
		qpPrint.innerHTML += sCurrTribe + "<br />";
		// Push each tribe name onto the stack and queue
		qStack.mfnPush(sCurrTribe);
		qQueue.mfnPush(sCurrTribe);
	}
	qpPrint.innerHTML += "---------------------------------------------<br />";

	var qColDiv1 = document.getElementById("idCol1");
	var qColDiv2 = document.getElementById("idCol2");

	// Pop and print for the stack and the queue
	while(!qStack.mfnIsEmpty()) {
		// Take each off the stack and print the value
		qColDiv1.innerHTML += "Stack: " + qStack.mfnPop() + "<br />";
		qColDiv2.innerHTML += "Queue: " + qQueue.mfnPop() + "<br />";
	}
}
 

Output

 
 

© 2007–2024 XoaX.net LLC. All rights reserved.