Deletion of first node from the circular link list requires that the list has at least one node. It is error to delete a node doesn't exist. In this process, last node's next pointer is updated to point to second node of the list. Now we will see the algorithm to delete node at first position in circular link list.
Algorithm to delete first node in circular link list:
The algorithm uses TAIL as pointer to the last node of circular list and TEMP is temporary pointer that help in deletion process. The steps are as follows:- Declare TEMP
- If list have only one node
- FREE (TAIL)
- TAIL = NULL
- Else
- TEMP = TAIL->NEXT [TEMP will point to first node]
- TAIL->NEXT = TAIL->NEXT->NEXT [TAIL's next will now point to second node]
- Free (TEMP) [free the first node]
- End If;
Function to delete node at first position in circular link list:
The function takes pointer to last node as input and return info part of the list if no error occur, otherwise returns -1 after printing error massage:
int deleteFirst(NODE **tail){
NODE *temp;
int info = -1;
if(*tail == NULL){
printf("\nError : List have no node");
}
else{
if(*tail == (*tail)->next){ // one node
temp = *tail;
*tail = NULL;
}
else{
temp = (*tail)->next;
(*tail)->next = (*tail)->next->next;
}
info = temp->info;
free(temp);
}
return info;
}
Program to delete node at first position in the circular link list:
#include <stdio.h>
#include <malloc.h>
struct node{
int info;
struct node *next;
};
typedef struct node NODE;
void insertAtFirst(NODE **, int);
int deleteFirst(NODE **);
void traverse(NODE **);
int main(){
NODE *tail = NULL;
insertAtFirst(&tail, 1); //1
insertAtFirst(&tail, 2); //2 1
insertAtFirst(&tail, 3); //3 2 1
traverse(&tail); // 3 2 1
printf("\n");
deleteFirst(&tail); // 2 1
traverse(&tail);
printf("\n");
deleteFirst(&tail); // 1
traverse(&tail);
deleteFirst(&tail); //
deleteFirst(&tail); // no nodes
traverse(&tail);
return 0;
}
int deleteFirst(NODE **tail){
NODE *temp;
int info = -1;
if(*tail == NULL){
printf("\nError : List have no node");
}
else{
if(*tail == (*tail)->next){ // one node
temp = *tail;
*tail = NULL;
}
else{
temp = (*tail)->next;
(*tail)->next = (*tail)->next->next;
}
info = temp->info;
free(temp);
}
return info;
}
void insertAtFirst(NODE **tail, int info){
NODE *ptr = (NODE*) malloc(sizeof(NODE));
ptr->info = info;
if(*tail == NULL){
ptr->next = ptr;
*tail = ptr;
}
else{
ptr->next = (*tail)->next;
(*tail)->next = ptr;
}
}
void traverse(NODE **tail){
NODE *temp;
temp = *tail;
if(*tail){
do{
printf("%d ", temp->next->info);
temp = temp->next;
} while(temp != *tail);
}
}
3 2 1 2 1 1 Error : List have no node
Comments
Post a Comment