Simple C program for the insertion, deletion and reversal of a link list. If you have any doubts, please let me know.
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
}*start=NULL,*newn,*temp,*prev,*ptr,*rev;
int num,pos,ele;
void insert_beg();
void insert_end();
void insert_aftr();
void insert_pos();
void delete_beg();
void delete_end();
void delete_ele();
void display();
void reverse();
main()
{
int ch,c,ch1,c1,ch2,c2;
do
{
printf("\n MENU\n1.Insert\n2.Delete\n3.Reverse\n4.Display");
printf("\nEnter your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:do
{
printf("\nINSERT\n1.At beginning\n2.At End\n3.After a node\n4.At a position\n5.Display");
printf("\nEnter your choice:");
scanf("%d",&ch1);
switch(ch1)
{
case 1:insert_beg();
break;
case 2:insert_end();
break;
case 3:insert_aftr();
break;
case 4:insert_pos();
break;
case 5:display();
break;
default:printf("\nWrong Choice");
break;
}
printf("\nDo you want to continue-Insert Menu?(1.Yes;2.No):");
scanf("%d",&c1);
}while(c1!=2);
break;
case 2:do
{
printf("\nDELETE\n1.At Front\n2.At End\n3.A specific node\n4.Display");
printf("\nEnter your choice:");
scanf("%d",&ch2);
switch(ch2)
{
case 1:delete_beg();
break;
case 2:delete_end();
break;
case 3:delete_ele();
break;
case 4:display();
break;
default:printf("\nWrong Choice");
break;
}
printf("\nDo you want to continue-Delete Menu?(1.Yes;2.No):");
scanf("%d",&c2);
}while(c2!=2);
break;
case 3:reverse();
break;
case 4:display();
break;
default:printf("Wrong Choice");
break;
}
printf("\nDo you want to continue-Main Menu?(1.Yes;2.No):");
scanf("%d",&c);
}while(c!=2);
}
void display()
{
if(start==NULL)
printf("\nLink List is empty\n");
else
{
temp=start;
while(temp!=NULL)
{
printf(" %d",temp->data);
temp=temp->next;
}
}
}
void reverse()
{
if(start==NULL)
printf("\nLink List is empty\n");
else
{
temp=start;
prev=NULL;
while(temp!=NULL)
{
rev=prev;
prev=temp;
temp=temp->next;
prev->next=rev;
}
start=prev;
}
}
void insert_beg()
{
printf("\nEnter the element to be inserted:");
scanf("%d",&num);
newn=(struct node*)malloc(sizeof(struct node));
newn->data=num;
if(start==NULL)
newn->next=NULL;
else
newn->next=start;
start=newn;
}
void insert_end()
{
printf("\nEnter the element to be inserted:");
scanf("%d",&num);
newn=(struct node*)malloc(sizeof(struct node));
newn->data=num;
if(start==NULL)
{
newn->next=NULL;
start=newn;
}
else
{
temp=start;
while(temp->next!=NULL)
{
temp=temp->next;
}
temp->next=newn;
newn->next=NULL;
}
}
void insert_aftr()
{
int flag=0;
if(start==NULL)
printf("\nLink List is empty\n");
else
{
printf("\nEnter the element after which insertion must be done:");
scanf("%d",&ele);
printf("\nEnter the element to be inserted:");
scanf("%d",&num);
newn=(struct node*)malloc(sizeof(struct node));
newn->data=num;
temp=start;
while(temp!=NULL)
{
if(temp->data==ele)
{
newn->next=temp->next;
temp->next=newn;
flag=1;
break;
}
temp=temp->next;
}
if(flag==0)
printf("\nElement not found\n");
}
}
void insert_pos()
{
int k=1,flag=0;
printf("\nEnter the position for insertion:");
scanf("%d",&pos);
if(pos==1)
insert_beg();
else
{
printf("\nEnter the element to be inserted:");
scanf("%d",&num);
newn=(struct node*)malloc(sizeof(struct node));
newn->data=num;
temp=start->next;
prev=start;
while(temp!=NULL)
{
k++;
if(k==pos)
{
newn->next=temp;
prev->next=newn;
flag=1;
break;
}
prev=temp;
temp=temp->next;
}
if(flag==0)
printf("\nPosition not found\n");
}
}
void delete_beg()
{
if(start==NULL)
printf("\nLink List is empty\n");
else
{
temp=start;
start=start->next;
free(temp);
}
}
void delete_end()
{
if(start==NULL)
printf("\nLink List is empty\n");
else if(start->next==NULL)
delete_beg();
else
{
temp=start;
while(temp->next!=NULL)
{
prev=temp;
temp=temp->next;
}
prev->next=NULL;
free(temp);
}
}
void delete_ele()
{
int flag=0;
if(start==NULL)
printf("\nLink List is empty\n");
else
{
printf("\nEnter the element to be deleted:");
scanf("%d",&num);
temp=start;
while(temp!=NULL)
{
if(start->data==num)
{
delete_beg();
flag=1;
temp=start;
}
else if(temp->data==num)
{
ptr=temp;
prev->next=temp->next;
temp=temp->next;
free(ptr);
flag=1;
}
prev=temp;
temp=temp->next;
}
if(flag==0)
printf("\nElement not found\n");
}
}