Skip to content

Instantly share code, notes, and snippets.

@luk0y
Created March 9, 2019 10:02
Show Gist options
  • Save luk0y/f78a53176667af0a1644c5b874af784c to your computer and use it in GitHub Desktop.
Save luk0y/f78a53176667af0a1644c5b874af784c to your computer and use it in GitHub Desktop.
All deletion operations in a double linked list
#include<stdio.h>
#include<stdlib.h>
void delstart();
void delend();
void delgiven();
void delbefore();
void delafter();
struct node
{
int data;
struct node *addr;
}; struct node *start=NULL;
void main()
{
man:
printf("\nEnter number of nodes you want to enter : ");
start=NULL;
char lol;
struct node *new_node,*ptr,*prev;
int y,c,x;
scanf("%d",&y);
if(y>0){
int k=y;
printf("\nEnter the data for the Linked list : \n");
while(y!=0)
{
scanf("%d",&x);
new_node=(struct node*) malloc(sizeof(struct node));
if(new_node==NULL)
{
printf("\nNo space");
}
else
{
if(start==NULL)
{
start=new_node;
new_node->data=x;
new_node->addr=NULL;
}
else
{
ptr=start;
while(ptr->addr!=NULL)
{
prev=ptr;
ptr=ptr->addr;
}
ptr->addr=new_node;
new_node->data=x;
new_node->addr=NULL;
}
}
y--;
}
while(k!=0){
jam:
printf("\n\nEnter 1 for delstart\nEnter 2 for delend\nEnter 3 for delgiven\nEnter 4 for delbefore\nEnter 5 for delafter\n---------------------\n\n");
scanf("%d",&c);
switch(c)
{
case 1:
if(k!=1){
delstart();
}
else
{
free(start);
printf("\nNew Linked list:\n");
printf("\nNULL\n\n");
goto gb;
}
break;
case 2:
if(k!=1){
delend();
break;
}
else
{
free(start);
printf("\nNew Linked list\n");
printf("\nNULL\n\n");
goto gb;
}
case 3:
if(k!=1){
delgiven();
}
else
{
mka:
printf("\nEnter the element you want to delete : ");
scanf("%d",&y);
if(start->data==y)
{
free(start);
printf("\nNew Linked list\n");
printf("\n\nNULL\n");
goto gb;
}else
{
printf("\nElement not found....Try again....");
goto mka;
}
}
break;
case 4:
if(k!=1){
delbefore();
break;}
else{
printf("\nThere is no before element\n");
goto jam;
}
case 5:
if(k!=1){
delafter();
break;}
else
{
printf("\nThere is no after element\n");
goto jam;
}
default:
printf("\nEnter a correct input\n\n");
goto jam;
}
new_node=start;
printf("\n\nNew Linked list : \n");
while(new_node!=NULL)
{
printf("%d\n",new_node->data);
new_node=new_node->addr;
}
gb:
k--;
if (k!=0){
printf("\nDo you want to continue deletion operations ?(press y to continue or press any other to exit ) : ");
scanf(" %c",&lol);
if(lol=='y')
{
goto jam;
}
else
{
goto endn;
}
}
else
{
printf("\n\nNo elements there in the list....press y to create the list again or else n to exit : ");
scanf(" %c",&lol);
if(lol=='y'){
goto man;
}
else
{
goto endn;
}
}
}
}
else
{
char hj;
printf("\n\nNo node created....Enter y to create a list or Enter any other : ");
scanf(" %c",&hj);
if(hj=='y')
{
goto man;
}
else
{
endn :
printf("\n\nBye Bye...See you again...\n");
}
}
}
void delstart()
{
struct node *ptr=start;
start=start->addr;
free(ptr);
ptr=start;
}
void delend()
{ struct node *ptr=start;
struct node *prev;
while(ptr->addr!=NULL)
{
prev=ptr;
ptr=ptr->addr;
}
prev->addr=NULL;
free(ptr);
}
void delgiven()
{ struct node *ptr=start;
struct node *prev;
int y;
moq :
printf("\nEnter the element you want to delete : ");
scanf("%d",&y);
ptr=start;
if(y!=ptr->data)
{
while(ptr->data!=y && ptr->addr!=NULL)
{
prev=ptr;
ptr=ptr->addr;
}
if(ptr->data==y){
prev->addr=ptr->addr;
free(ptr);
ptr=start;
}
else
{
printf("\nElement not found...Enter another...\n\n");
goto moq;
}
}else
{
delstart();
}
}
void delbefore()
{ struct node *ptr=start;
struct node *prev,*pp;
int y;
malk:
printf("\nEnter the reference item to del before : ");
int x=1;
scanf("%d",&y);
ptr=start;
if (ptr->data!=y){
while(ptr->data!=y && ptr->addr!=NULL)
{
x=x+1;
pp=prev;
prev=ptr;
ptr=ptr->addr;
}
if(ptr->data==y){
if(x==2)
{ start=ptr;
free(prev);
}
else
{ pp->addr=ptr;
free(prev);}
}else
{
printf("\nReference element is not exist in the list ...Try again \n\n");
goto malk;
}
}
else
{printf("\nYou have entered the first node...Enter again another number to exit \n\n");
goto malk;
}
}
void delafter()
{ struct node *ptr=start;
struct node *prev; int y;
kj:
printf("\nEnter the reference item to del after : ");
scanf("%d",&y);
ptr=start;
while(ptr->data!=y && ptr->addr->addr!=NULL)
{
ptr=ptr->addr;
}
if(ptr->data==y){
prev=ptr->addr;
ptr->addr=prev->addr;
free(prev);
}else
{
printf("\nYou have entered the last element or you entered a number which is not there in the list...Try again \n");
goto kj;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment