Circular Singly Linked List
A circular singly linked list is a linear data structure, in which the elements are stored in the form of a node. Each node contains two sub-elements. A data part that stores the value of the element and the next part that stores the pointer to the next node as shown in the below image:
The first node also known as HEAD is always used as a reference to traverse the list. The last node points to HEAD. A circular singly linked list can be visualized as a chain of nodes, where every node points to the next node. Along with this, next of the last node is linked to the head node.
Implementation of Circular Singly Linked List
Representation:
In C, a node can be created using structure. In C++, circular singly linked list can be created using a class and a Node using structures. The LinkedList class contains Node as class member.
In Java, Python, C# and PHP, circular singly linked list can be represented as a class and a Node as a separate class. The LinkedList class contains a reference of Node class type.
//node structure struct Node { int data; Node* next; }; class LinkedList { public: Node* head; public: //constructor to create an empty LinkedList LinkedList(){ head = NULL; } };
//node structure struct Node { int data; struct Node* next; };
# node structure class Node: #constructor to create a new node def __init__(self, data): self.data = data self.next = None #class Linked List class LinkedList: #constructor to create an empty LinkedList def __init__(self): self.head = None
//node structure class Node { int data; Node next; }; class LinkedList { Node head; //constructor to create an empty LinkedList LinkedList(){ head = null; } };
//node structure class Node { public int data; public Node next; }; class LinkedList { public Node head; //constructor to create an empty LinkedList public LinkedList(){ head = null; } };
//node structure class Node { public $data; public $next; } class LinkedList { public $head; //constructor to create an empty LinkedList public function __construct(){ $this->head = null; } };
Create a Circular Singly Linked List
Let us create a simple circular singly linked list which contains three data nodes.
#include <iostream> using namespace std; //node structure struct Node { int data; Node* next; }; class LinkedList { public: Node* head; public: //constructor to create an empty LinkedList LinkedList(){ head = NULL; } }; // test the code int main() { //create an empty LinkedList LinkedList MyList; //Add first node. Node* first = new Node(); first->data = 10; //linking with head node MyList.head = first; //linking next of the node with head first->next = MyList.head; //Add second node. Node* second = new Node(); second->data = 20; //linking with first node first->next = second; //linking next of the node with head second->next = MyList.head; //Add third node. Node* third = new Node(); third->data = 30; //linking with second node second->next = third; //linking next of the node with head third->next = MyList.head; return 0; }
#include <stdio.h> #include <stdlib.h> //node structure struct Node { int data; struct Node* next; }; // test the code int main() { //create the head node with name MyList struct Node* MyList = NULL; //Add first node. struct Node* first; //allocate second node in the heap first = (struct Node*)malloc(sizeof(struct Node)); first->data = 10; //linking with head node MyList = first; //linking next of the node with head first->next = MyList; //Add second node. struct Node* second; //allocate second node in the heap second = (struct Node*)malloc(sizeof(struct Node)); second->data = 20; //linking with first node first->next = second; //linking next of the node with head second->next = MyList; //Add third node. struct Node* third; //allocate third node in the heap third = (struct Node*)malloc(sizeof(struct Node)); third->data = 30; //linking with second node second->next = third; //linking next of the node with head third->next = MyList; return 0; }
# node structure class Node: #constructor to create a new node def __init__(self, data): self.data = data self.next = None #class Linked List class LinkedList: #constructor to create an empty LinkedList def __init__(self): self.head = None # test the code # create an empty LinkedList MyList = LinkedList() #Add first node. first = Node(10) #linking with head node MyList.head = first #linking next of the node with head first.next = MyList.head #Add second node. second = Node(20) #linking with first node first.next = second #linking next of the node with head second.next = MyList.head #Add third node. third = Node(30) #linking with second node second.next = third #linking next of the node with head third.next = MyList.head
//node structure class Node { int data; Node next; }; class LinkedList { Node head; //constructor to create an empty LinkedList LinkedList(){ head = null; } }; // test the code public class Implementation { public static void main(String[] args) { //create an empty LinkedList LinkedList MyList = new LinkedList(); //Add first node. Node first = new Node(); first.data = 10; //linking with head node MyList.head = first; //linking next of the node with head first.next = MyList.head; //Add second node. Node second = new Node(); second.data = 20; //linking with first node first.next = second; //linking next of the node with head second.next = MyList.head; //Add third node. Node third = new Node(); third.data = 30; //linking with second node second.next = third; //linking next of the node with head third.next = MyList.head; } }
using System; //node structure class Node { public int data; public Node next; }; class LinkedList { public Node head; //constructor to create an empty LinkedList public LinkedList(){ head = null; } }; // test the code class Implementation { static void Main(string[] args) { //create an empty LinkedList LinkedList MyList = new LinkedList(); //Add first node. Node first = new Node(); first.data = 10; //linking with head node MyList.head = first; //linking next of the node with head first.next = MyList.head; //Add second node. Node second = new Node(); second.data = 20; //linking with first node first.next = second; //linking next of the node with head second.next = MyList.head; //Add third node. Node third = new Node(); third.data = 30; //linking with second node second.next = third; //linking next of the node with head third.next = MyList.head; } }
<?php //node structure class Node { public $data; public $next; } class LinkedList { public $head; //constructor to create an empty LinkedList public function __construct(){ $this->head = null; } }; // test the code //create an empty LinkedList $MyList = new LinkedList(); //Add first node. $first = new Node(); $first->data = 10; //linking with head node $MyList->head = $first; //linking next of the node with head $first->next = $MyList->head; //Add second node. $second = new Node(); $second->data = 20; //linking with first node $first->next = $second; //linking next of the node with head $second->next = $MyList->head; //Add third node. $third = new Node(); $third->data = 30; //linking with second node $second->next = $third; //linking next of the node with head $third->next = $MyList->head; ?>