HTML

html content help to improve the coding

Wednesday, 28 March 2012

CIRCULAR LINKED LIST DELETION


How can we perform deletion in a circular linked list?
Just as in case of the singly or linear linked lists, deletions can be performed in the three ways too :
  1. Deletion from the front of the linked list.
  2. Deletion from the end of the linked list.
  3. Deletion from the specified position in the linked list.
Now we will see how we can perform all types  of deletion operations on a linked list through the following code snippet :
#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#include<process.h>
struct node
    {
int num;
struct node *next;
};                       /* declaring a global node of type struct */
typedef struct node NODE;  /* providing a type definition to the above created structure */
NODE *head=NULL;          /* declaring some of the global variable that would be used throughout the program */
NODE *temp, *first, *last;
int info;
void display();
void create_list();
void del_at_begin();
void del_at_end();
void del_at_specifiedpos();
void main()                              /* starting the main method() */
{
int i;
clrscr();
printf("\nprogram for deletion in a singly linked list :\n");
do
{
printf("\nEnter your choice :\n");     /*    creating menu for various insertion operations on the list */
printf("\n1.Create a linked list :");
printf("\n2.Delete from the front in the linked list :");
printf("\n3.Delete from the end position in the linked list :");
printf("\n4.Delete at any specified position in the linked list :");
printf("\n5.Exit\n");
fflush(stdin);
scanf("\n%d",&i);
switch(i)
{
case 1:
create_list();
display();
case 2:
del_at_begin();
display();
break;
case 3:
del_at_end();
display();
break;
case 4:
del_at_specifiedpos();
display();
break;
case 5:
exit(0);
}
}
while(i!=5);
getch();
}




void create_list()
{
printf("\nEnter your element in the linked list :");
scanf("%d",&info);
temp=(NODE *)malloc(sizeof(NODE));    /* allocating memory for the node to be inserted */
temp->num=info;
temp->next=NULL;
if(head==NULL)                     /* checking whether list is empty */
{
temp->next=temp;
head=temp;
last=temp;
}
else
{
last->next=temp;
last=temp;
last->next=head;
}
}
void display()
{
if(head==NULL)
printf("linked list is empty");
else
{
    first=head;
    printf("\nStatus of the linked list is as follows :\n");
     while(first->next!=head)                /* traversing the linked list */
     {
      printf("\n%d",first->num);
      first=first->next;
     }
    }
}
void del_at_begin()
{
 if(head==NULL)
{
     printf("linked list is empty");
}
 else
{
    temp=head;
head=head->next;
last->next=head;
free(temp);
}

}
void del_at_end()
{
 if(head==NULL)

 {
  printf("\nlinked list is empty");
 }
else
{
     temp=head;
 while(temp->next!=last)
{
     first=temp;
 temp=temp->next;
}
    first->next=temp->next;
last=first;
free(temp);
}
}
void del_at_specifiedpos()
{
 int node_num;
 if(head==NULL)
{
    printf("\nlinked list is empty");
}
else
{
    temp=head;
 printf("\nEnter the position of the node you want to delete");
 scanf("\n%d",&node_num);
    for(int i=1;i<node_num;i++)
{
     first=temp;
 temp=temp->next;
}
first->next=temp->next;
free(temp);
}
}


No comments:

Post a Comment