LINKED LIST In C
#include<stdio.h>
#include<conio.h>
#include”stk.c”
typedef struct nodetype
{
int info;
struct nodetype *next;
}node;
void create(node **);
void insert_beg(node **,int);
void insert_end(node **,int);
void insert_after(node *,int,int);
void delete_beg(node **);
void delete_end(node **);
void delete_after(node *,int);
void delete_duplicate(node **head);
void traverse_in(node *);
void traverse_rev(node *);
void reverse_list(node **);
node* search(node *,int);
void main()
{
int item,choice,after;
char ch;
node *head;
node *ptr1;
clrscr();
create(&head);
createstack(st);
do
{
printf(“n 1-Inserting an element[at beginning]”);
printf(“n 2-Inserting an element[at end]”);
printf(“n 3-Inserting an element[at after a given element]”);
printf(“n 4-Deleting an element[from beginning]”);
printf(“n 5-Deleting an element[from end]”);
printf(“n 6-Deleting an element[after a given element]”);
printf(“n 7-Traversing[Inorder]”);
printf(“n 8-Traversing[Reverse order]”);
printf(“n 9-Searching”);
printf(“n 10-Reverse the linked list”);
printf(“n 11-Deleting all duplicate nodes”);
printf(“nn Enter Your Choice”);
scanf(“%d”,&choice);
switch(choice)
{
case 1:
printf(“n Enter the element= “);
scanf(“%d”,&item);
insert_beg(&head,item);
break;
case 2:
printf(“n Enter the element= “);
scanf(“%d”,&item);
insert_end(&head,item);
break;
case 3:
printf(“n Enter the Value which u want to insert= “);
scanf(“%d”,&item);
printf(“n Enter the element after which u want to place the Value = “);
scanf(“%d”,&after);
insert_after(head,after,item);
break;
case 4:
delete_beg(&head);
break;
case 5:
delete_end(&head);
break;
case 6:
printf(“n Enter the Just Before Deleted element= “);
scanf(“%d”,&item);
delete_after(head,item);
break;
case 7:
if(head == NULL)
printf(“n List is empty…”);
else
traverse_in(head);
break;
case 8:
if(head == NULL)
printf(“n List is empty…”);
else
traverse_rev(head);
break;
case 9:
printf(“nEnter the Search Element= “);
scanf(“%d”,&item);
ptr1=search(head,item);
if(ptr1==NULL)
printf(“nElement is not Found”);
else
printf(“nElement is Found”);
break;
case 10:
reverse_list(&head);
break;
case 11:
delete_duplicate(&head);
}
printf(“nDO YOU WANNA CONTINUE(y/n)=n”);
fflush(stdin);
scanf(“%c”,&ch);
}while(ch==’y’|| ch==’Y’);
}
// CREATING AN EMPTY LIST
void create(node **head)
{
*head = NULL;
}
// INSERTING AT THE BEGINNING OF THE LIST
void insert_beg(node **head,int item)
{
node *ptr;
ptr = (node*)malloc(sizeof(node));
ptr->info = item;
if( *head == NULL)
ptr->next = NULL;
else
ptr->next = *head;
*head = ptr;
}
// INSERTING AT THE END OF THE LIST
void insert_end(node **head,int item)
{
node *ptr,*ptr1;
ptr = (node*)malloc(sizeof(node));
ptr->info = item;
ptr->next = NULL;
if( *head == NULL)
*head = ptr;
else
{
ptr1 = *head;
while(ptr1->next != NULL)
ptr1 = ptr1->next;
}
ptr1->next = ptr;
}
INSERTING AFTER THE GIVEN ELEMENT OF THE LIST
void insert_after(node *head,int after,int item)
{
node *ptr,*loc;
loc = search(head,after);
if(loc == NULL)
return;
ptr = (node*)malloc(sizeof(node));
ptr->info = item;
ptr->next = loc->next;
loc->next = ptr;
}
// DELETING FROM THE BEGINNING OF THE LIST
void delete_beg(node **head)
{
node *ptr;
if( *head == NULL)
{
printf(“n List is Empty”);
return;
}
else
{
ptr = *head;
*head = (*head)->next;
free(ptr);
printf(“n First node is Deleted “);
}
}
// DELETING FROM THE END OF THE LIST
void delete_end(node **head)
{
node *ptr,*ptr1;
if( *head == NULL)
{
printf(“n List is Empty”);
return;
}
else if((*head)->next == NULL)
{
ptr = *head;
*head = NULL;
free(ptr);
printf(“Last AS WELL AS first node is Deleted “);
}
else
{
ptr = *head;
ptr1 = (*head)->next;
while(ptr1->next != NULL)
{
ptr = ptr1;
ptr1 = ptr1->next;
}
ptr->next = NULL;
free(ptr1);
printf(“n Last node is Deleted “);
}
}
// DELETING AFTER A GIVEN ELEMENT OF THE LIST
void delete_after(node *head,int after)
{
node *ptr,*loc;
loc = search(head,after);
if(loc == NULL)
{
printf(“n List is Empty”);
return;
}
ptr = loc->next;
loc->next = ptr->next;
free(ptr);
printf(“n node is Deleted “);
}
// TRAVERSING A LIST IN-ORDER
void traverse_in(node *head)
{
while(head != NULL)
{
printf(“%d “,head->info);
head = head->next;
}
}
// TRAVERSING A LIST IN REVERSE ORDER
void traverse_rev(node *head)
{
while(head != NULL)
{
push(st,head->info);
head = head->next;
}
display(st);
}
// TRAVERSING A LIST IN REVERSE ORDER(BY USING RECURSION)
void traverse_rev(node *head)
{
if(head->next != NULL)
traverse_rev(head->next);
printf(“%d “,head->info);
}
// SEARCHING AN ELEMENT
node *search(node *head,int item)
{
while(head != NULL && head->info != item)
head = head->next;
return head;
}
// REVERSING THE WHOLE LIST
void reverse_list(node **head)
{
node *prevnode,*currnode,*nextnode;
currnode=*head;
nextnode= currnode->next;
prevnode=NULL;
currnode->next = NULL;
while(nextnode != NULL)
{
prevnode=currnode;
currnode=nextnode;
nextnode=currnode->next;
currnode->next = prevnode;
}
*head = currnode;
}
// DELETED ALL THE DUPLICATES NODES IN THE LIST
void delete_duplicate(node **head)
{
node *ptr,*ptr1,*prev_node,*temp;
ptr = *head;
while(ptr != NULL)
{
ptr1 = ptr->next;
prev_node = ptr;
while(ptr1 != NULL)
{
if(ptr->info == ptr1->info)
{
temp=ptr1;
prev_node->next = ptr1->next;
ptr1=prev_node->next;
free(temp);
}
prev_node = ptr1;
ptr1 = ptr1->next;
}
ptr = ptr->next;
}
}