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