Doubly Linked List - Deletion Operation | Data Structure

 


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