Linked List In C

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;

}

}

Written by 

Leave a Reply

Your email address will not be published. Required fields are marked *