As we have seen in the previous article, the last node contain NULL value. But in a Circular linked list the last node contains a pointer to the first node of the list. It does not contain null pointer. With this we can easily go from the last node to the first node. It has no end.

A circular linked list can be either singly or doubly linked list.

Insertion is a process of inserting an element in an existing linked list either at the following position.

• Insert at the first position
• Insert at the last position
• Insert into ordered list

### Algorithm

Insert at the first position

``````Step 1: IF AVAIL = NULL
Write OVERFLOW
Go to Step 11
[END OF IF]
Step 2: SET = AVAIL
Step 3: SET AVAIL = AVAIL NEXT
Step 4: SET DATA = VAL
Step 5: SET PTR = START
Step 6: Repeat Step 7 while PTR NEXT != START
Step 7: PTR = PTR NEXT
[END OF LOOP]
Step 8: SET NEXT = START
Step 9: SET PTR NEXT =
Step 1 : SET START =
Step 11: EXIT``````

In the above algorithm, we first check the available memory. If it has no free memory, then print OVERFLOW, else we allocate free space for new node. Here, NEXT part is initialized with address of the first node and START pointer hold address of the new node.

### Algorithm

Delete first node from circular list

``````Step 1: IF START = NULL
Write UNDERFLOW
Go to Step 8
[END OF IF]
Step 2: SET PTR = START
Step 3: Repeat Step 4 while PTR NEXT != START
Step 4: SET PTR = PTR NEXT
[END OF LOOP]
Step 5: SET PTR NEXT = START NEXT
Step 6: FREE START
Step 7: SET START = PTR NEXT
Step 8: EXIT``````

### Algorithm

Delete last node from circular list

``````Step 1: IF START = NULL
Write UNDERFLOW
Go to Step 8
[END OF IF]
Step 2: SET PTR = START
Step 3: Repeat Steps 4 and 5 while PTR NEXT != START
Step 4: SET PREPTR = PTR
Step 5: SET PTR = PTR NEXT
[END OF LOOP]
Step 6: SET PREPTR NEXT = START
Step 7: FREE PTR
Step 8: EXIT``````

## Single Circular Linked List Program

``````#include<stdio.h>
#include<stdlib.h>

typedef struct Node

{
int info;
struct Node *next;
}node;

node *front=NULL,*rear=NULL,*temp;

void create_list();
void delete_list();
void display_list();

int main()
{
int chc;
do
{
printf("\nChoice Options\n\t Enter 1 to create new element : ");
printf("\n\t Enter 2 to delete the element : ");
printf("\n\t Enter 3 to display the list : ");
printf("\n\t Enter 4 to exit from main : ");
scanf("%d",&chc);

switch(chc)
{
case 1:
create_list();
break;

case 2:
delete_list();
break;

case 3:
display_list();
break;

case 4:
return 1;

default:
}
}while(1);

return 0;
}

void create_list()
{
node *newnode;
newnode=(node*)malloc(sizeof(node));
printf("\nEnter the new node value : ");
scanf("%d",&newnode->info);
newnode->next=NULL;
if(rear==NULL)
front=rear=newnode;
else
{
rear->next=newnode;
rear=newnode;
}

rear->next=front;
}

void delete_list()
{
temp=front;
if(front==NULL)
printf("\nList Underflow :");
else
{
if(front==rear)
{
printf("\n%d",front->info);
front=rear=NULL;
}
else
{
printf("\n%d",front->info);
front=front->next;
rear->next=front;
}

temp->next=NULL;
free(temp);
}
}

void display_list()
{
temp=front;
if(front==NULL)
printf("\nEmpty List");
else
{
printf("\n");
for(;temp!=rear;temp=temp->next)
}
}``````

### Output of the above program

``````
Choice Options
Enter 1 to create new element :
Enter 2 to delete the element :
Enter 3 to display the list :
Enter 4 to exit from main :

Enter the new node value : 34

Choice Options
Enter 1 to create new element :
Enter 2 to delete the element :
Enter 3 to display the list :
Enter 4 to exit from main :

Enter the new node value : 65

Choice Options
Enter 1 to create new element :
Enter 2 to delete the element :
Enter 3 to display the list :
Enter 4 to exit from main :

Enter the new node value : 73

Choice Options
Enter 1 to create new element :
Enter 2 to delete the element :
Enter 3 to display the list :
Enter 4 to exit from main :

Choice Options
Enter 1 to create new element :
Enter 2 to delete the element :
Enter 3 to display the list :
Enter 4 to exit from main :

34
Choice Options
Enter 1 to create new element :
Enter 2 to delete the element :
Enter 3 to display the list :
Enter 4 to exit from main :