Description
To add a node in the end of circular linked list - Case 1: Check if list is empty a) Assign the address of new node to head b) Assign the head to the next field of new node Case 2: If list has elements a) Traverse the list until last node contain the address of first node b) Assign the address of new node to the next of last node c) Assign the head to the next field of new node Note: Here head contains the address of first node
C/C++
#include<stdio.h> #include<malloc.h> struct node *createCircularLinkedList(int); void displayCircularLinkedList(struct node *); struct node *insert_end(struct node *); //Declaring node struct node{ int data; struct node *next; }; int main(){ int n; struct node *head; printf("Enter the size of linked list : "); scanf("%d",&n); //Calling function to create node head=createCircularLinkedList(n); //Calling function to display list displayCircularLinkedList(head); //Code to insert the node at end of linked list head=insert_end(head); printf("\nThe linked list after addition of node at end - \n"); //Calling function to display list after addition of node at end displayCircularLinkedList(head); return 0; } struct node *createCircularLinkedList(int n){ int i; struct node *head=NULL; struct node *newNode, *ptr; for(i=0;i<n;i++){ //Creating a node newNode=(struct node *)malloc(sizeof(struct node)); //Assigning data to newly created node printf("Enter %d node data : ",(i+1)); scanf("%d",&newNode->data); /*If list is empty assign the address of newly created node to head*/ if(head==NULL){ newNode->next=newNode; head=newNode; }else{ /* If list already have few elements then loop through list and add newly created node at the end of list*/ ptr=head; while(ptr->next!=head){ ptr=ptr->next; } ptr->next=newNode; newNode->next=head; } } return head; } void displayCircularLinkedList(struct node *head){ struct node *ptr; //If list is empty if(head==NULL){ printf("The Linked List is Empty"); }else{ /*If list has elements then loop through the loop and print elements one by one in sequential manner*/ ptr=head; while(ptr->next!=head){ printf("The value of node is %d and their address is %u\n",ptr->data,ptr); ptr=ptr->next; } printf("The value of node is %d and their address is %u\n",ptr->data,ptr); } } //Function to add node in the beginning struct node *insert_end(struct node *head){ struct node *newNode, *ptr; int num; //Creating new node to be added newNode=(struct node*)malloc(sizeof(struct node)); printf("\nEnter the node data of new node : "); scanf("%d",&newNode->data); //assign the address of newly created node to the head if list is empty if(head==NULL){ head=newNode; newNode->next=head; }else{ ptr=head; while(ptr->next!=head){ ptr=ptr->next; } ptr->next=newNode; newNode->next=head; } return head; }
Java
import java.io.*; import java.util.Scanner; public class AddNodeEndCircularSinglyLinkedList { //Declaring node class Node{ int data; Node next; public Node(int data) { this.data=data; //Assigning null value to the next field this.next=null; } } public Node head=null; //Function to add node public void addNode(int data) { //Creating a new node Node newNode = new Node(data); /*If list is empty assign the address of newly created node to head*/ if(head==null) { newNode.next=newNode; head=newNode; }else { /* If list already have few elements then loop through list and add newly created node at the end of list*/ Node tail=head; while(tail.next!=head) { tail=tail.next; } tail.next=newNode; newNode.next=head; } } public void display() { Node ptr=head; //If list is empty if(ptr==null) { System.out.println("The list is empty"); return; } System.out.println("The nodes of lists are : "); /*If list has elements then loop through the loop and print elements one by one in sequential manner*/ while(ptr.next!=head) { System.out.print(ptr.data+" "); ptr=ptr.next; } System.out.print(ptr.data+" "); } public static void main(String[] args) { Scanner scanner = new Scanner(System.in); AddNodeEndCircularSinglyLinkedList list = new AddNodeEndCircularSinglyLinkedList(); System.out.println("Enter number of nodes : "); int n = scanner.nextInt(); for(int i=0;i<n;i++) { System.out.println("Enter value of "+(i+1)+" node : "); int val = scanner.nextInt(); list.addNode(val); } //Calling function to display list list.display(); System.out.println("\nEnter the value you want to enter at end : "); int end = scanner.nextInt(); list.insert_end(end); //Calling function to display list after addition of node in the end System.out.println("After addition of node in the end - "); list.display(); } //Function to add node in the beginning private void insert_end(int beg) { Node ptr=head; //Creating new node to be added Node nodeToAdd = new Node(beg); //assign the address of newly created node to the head if list is empty if(head==null) { head=nodeToAdd; nodeToAdd.next=head; }else { ptr=head; while(ptr.next!=head){ ptr=ptr.next; } ptr.next=nodeToAdd; nodeToAdd.next=head; } } }
Related Programs
1) Program To Create And Display Singly Linked List2) Program To Create And Display Circular Singly Linked List
3) Program To Add A Node At The Beginning Of Circular Linked List
4) Program To Add A Node In The End Of Singly Linked List
5) Program To Delete Node From End Singly Linked List
6) Program To Sort Elements Of Singly Linked List
7) Program To Reverse Elements Singly Linked List
8) Program to Find Maximum And Minimum Value Node In Singly Linked List
9) Program to Search an Element In Singly Linked List
10) Program To Remove Duplicate Elements From Singly Linked List