In this post I will show you how we perform deletion operation in Doubly Linked List in different ways. Like:
1. How we delete node at First ?
2. How we delete node at Last ?
3. How we delete node at specific position ?
I will give you a complete logic for every case.
Graphical Representation:
Create doubly link list having three nodes
Copy Code
//Complete Program for deletion of node from doubly link list:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
struct node
{
int data;
struct node *next,*prev;
};
// Function for display Link List
struct node *display(struct node *start)
{
struct node *temp
temp=start;
while(temp!=NULL)
{
printf("->%d",temp->data);
temp=temp->next;
}
return(start);
}
// Function for deleting node from beginning of Link List
struct node *DBdelbegg(struct node *start)
{
struct node *temp;
if(start==NULL)
{
printf("Empty List !");
}
else
{
temp=start;
start=start->next;
start->prev=NULL;
free(temp);
}
return(start);
}
// Function for deleting node from last of Link List
struct node *DBdellast(struct node *start)
{
struct node *temp,*pre;
if(start==NULL)
{
printf("Empty List");
}
else
{
temp=start;
while(temp->next!=NULL)
{
pre=temp;
temp=temp->next;
}
if(temp==start)
{
start=NULL;
free(temp);
}
else
{
temp->prev->next=NULL;
free(temp);
}
}
return(start);
}
// Function for deleting node from specific position of Link List
struct node *DBdelpos(struct node *start,int x)
{
struct node *temp=start,*pre;
while(temp!=NULL)
{
if(temp->data!=x)
{
pre=temp;
temp=temp->next;
}
else
{
if(temp==start)
{
start=start->next;
free(temp);
}
else
{
pre->next=temp->next;
temp->next->prev=pre;
free(temp);
}
return(start);
}
}
printf("Data not found !");
return(start);
}
// Main Function
void main()
{
struct node *newnode,*oldnode,*start=NULL,*temp;
int ch;
do
{
newnode=(struct node *)malloc(sizeof(struct node));
newnode->next=NULL;
newnode->prev=NULL;
printf("Enter Data:");
scanf("%d",&newnode->data);
if(start==NULL)
{
start=newnode;
}
else
{
oldnode->next=newnode;
newnode->prev=oldnode;
}
oldnode=newnode;
printf("Enter Choice: 1-Continue 2-Stop:");
scanf("%d",&ch);
}while(ch!=2);
printf("Link List is:");
display(start);
printf("\n");
printf("What you want to do ?\n");
printf("1-Display 2-Delete at First 3-Delete at Last 4-Delete at Specific Position :");
scanf("%d",&ch);
switch(ch)
{
case 1:
{
printf("Link List is:");
display(start);
break;
}
case 2:
{
printf("Link List after deleting node from begnning is:");
display(DBdelbegg(start));
break;
}
case 3:
{
printf("Link List after deleting node from last is:");
display(DBdellast(start));
break;
}
case 4:
{
int p;
printf("Enter Element you want to delete:");
scanf("%d",&p);
printf("Link List after deleting node from from %d position is:",p);
display(DBdelpos(start,p));
break;
}
default :
{
printf("Invalid Choice");
}
}
getch();
}
No comments:
Post a Comment