Circular Linked List - Deletion Operation | Data Structure

 


In this post I will show you how we perform deletion operation in Circular 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:


Complete Program for Deletion from Circular Link List

Copy Code

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

struct node

{

    int data;

    struct node *next;

};

// Function for display Link List


void display(struct node *t)

{

    struct node *str;

    str=t;

    printf("Start:%d\n",t);

    do

    {

        printf("->%d|%d|",t->data,t->next);

        t=t->next;

    } while(t!=str); 

}

// Function for deleting first node from Circular Link List

struct node *Cir_delbegg(struct node *start)

{

    struct node *temp,*t;

    if(start==NULL)

    {

        printf("Empty List !");

    }

    else

    {

        temp=start;

        t=temp;

        while(temp->next!=start)

        {

            temp=temp->next;

        }

        start=start->next;

        temp->next=start;

        free(t);

    }

    return(start);

}

// Function for deleting last node from  Circular  Link List

struct node *Cir_dellast(struct node *start)

{

    struct node *temp,*prev;

    temp=start;

    if(temp==temp->next)

    {

        start=NULL;

        free(temp);

        //printf("Empty List");

    }

    else

    {

        //temp=start;

        while(temp->next!=start)

        {

            prev=temp;

            temp=temp->next;

        }

        prev->next=temp->next;

        free(temp);

    }

     return(start);

}

// Function for deleting node from specific position of Link List

struct node *Cir_delpos(struct node *start,int x)

{

    struct node *temp=start,*prev,*t;

    if(start==NULL)

    {

        printf("Data not found");

    }

    else

    {

        temp=start;

        while(temp->next!=start)

        {

            if(temp->data!=x)

            {

                prev=temp;

                temp=temp->next;

            }

            else

            {

                break;

            }

        }

            if(temp->next==start)

            {

                if(temp->data!=x)

                {

                    printf("Data not found");

                }

                else

                {

                    if(temp==start)

                    {

                        start=NULL;

                        free(temp);

                    }

                    else

                    {

                        prev->next=temp->next;

                    }

                    free(temp);

                }

            }

            else

            {

                if(temp==start)

                {

                    t=start;

                    while(t->next!=start)

                    {

                     t=t->next;   

                    }    

                    start=start->next;

                    t->next=start;

                }

                else

                {

                    prev->next=temp->next;

                }

                free(temp);

            }                       

    }

    return(start);

}


// Main Function

void main()

{

    struct node *newnode,*oldnode,*start=NULL,*temp;

    int ch;   

    do

    {

        newnode=(struct node *)malloc(sizeof(struct node));

        printf("Enter Data:");

        scanf("%d",&newnode->data);

        if(start==NULL)

        {

            start=newnode;

            newnode->next=start;

        }

        else

        {

            newnode->next=start;

            oldnode->next=newnode;          

        }

        oldnode=newnode;   

        printf("Enter Choice: 1-Continue  2-Stop :");

        scanf("%d",&ch);

    }while(ch!=2);


    printf("Circular 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("Circular Link List is:"); 

           display(start);

           break;

        }

        case 2:

        {

           printf("Circular Link List after deleting node from begnning is:");

           display(Cir_delbegg(start)); 

           break;

        }

        case 3:

        {

            printf("Circular Link List after deleting node from last is:");

            display(Cir_dellast(start));

            break;

        }

        case 4:

        {

          int p;

          printf("Enter Element you want to delete:");

          scanf("%d",&p);

          printf("Circular Link List after deleting node from from %d position is:",p);

          display(Cir_delpos(start,p)); 

          break;

        }

        default :

        {

        printf("Invalid Choice");

        }

    }         

    getch();

}


OUT PUT:






No comments:

Post a Comment