#include<stdio.h>
#include<stdlib.h>
void insertAtBeginning(int);
void insertAtEnd(int);
void insertBetween(int,int,int);
void display();
void removeBeginning();
void removeEnd();
void removenode(int);
struct Node
{
int data;
struct Node *next;
}*head = NULL;
int main()
{
int opt,value,opt1,val1,val2;
while(1)
{
mainmenu : printf("
MENU
1. Insert
2. Display
3. Delete
4. Exit
Enter your choice: ");
scanf("%d",&opt);
switch(opt)
{
case 1: printf("Enter the value to be insert: ");
scanf("%d",&value);
while(1)
{
printf("Where you want to insert:
1. At Beginning
2. At End
3. Between
Enter your choice: ");
scanf("%d",&opt1);
switch(opt1)
{
case 1: insertAtBeginning(value);
break;
case 2: insertAtEnd(value);
break;
case 3: printf("Enter the two values where you want to insert: ");
scanf("%d%d",&val1,&val2);
insertBetween(value,val1,val2);
break;
/* default: printf("
Wrong InputTry again");*/
}
goto mainmenu;
}
break;
case 2: display();
break;
case 3: printf("How do you want to Delete:
1. From Beginning
2. From End
3. given_node
Enter your choice: ");
scanf("%d",&opt1);
switch(opt1)
{
case 1: removeBeginning();
break;
case 2: removeEnd(value);
break;
case 3: printf("Enter the value which you want to delete: ");
scanf("%d",&val2);
removenode(val2);
break;
default: printf("
Wrong Input!! Try again!!!
");
goto mainmenu;
}
break;
case 4: exit(0);
default: printf("
Wrong input!!! Try again!!
");
}
}
}
void insertAtBeginning(int value)
{
struct Node *newNode;
newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
if(head == NULL)
{
newNode->next = NULL;
head = newNode;
}
else
{
newNode->next = head;
head = newNode;
}
printf("
One node inserted!!!
");
}
void insertAtEnd(int value)
{
struct Node *newNode;
newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
newNode->next = NULL;
if(head == NULL)
head = newNode;
else
{
struct Node *temp = head;
while(temp->next != NULL)
temp = temp->next;
temp->next = newNode;
}
printf("
One node inserted!!!
");
}
void insertBetween(int value, int loc1, int loc2)
{
struct Node *newNode;
newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = value;
if(head == NULL)
{
newNode->next = NULL;
head = newNode;
}
else
{
struct Node *temp = head;
while(temp->data != loc1 && temp->data != loc2)
temp = temp->next;
newNode->next = temp->next;
temp->next = newNode;
}
printf("
One node inserted!!!
");
}
void removeBeginning()
{
if(head == NULL)
printf("
List is Empty!!!");
else
{
struct Node *temp = head;
if(head->next == NULL)
{
head = NULL;
free(temp);
}
else
{
head = temp->next;
free(temp);
printf("
One node deleted!!!
");
}
}
}
void removeEnd()
{
if(head == NULL)
{
printf("
List is Empty!!!
");
}
else
{
struct Node *temp1 = head,*temp2;
if(head->next == NULL)
head = NULL;
else
{
while(temp1->next != NULL)
{
temp2 = temp1;
temp1 = temp1->next;
}
temp2->next = NULL;
}
free(temp1);
printf("
One node deleted!!!
");
}
}
void removenode(int delValue)
{
struct Node *temp1 = head, *temp2;
while(temp1->data != delValue)
{
if(temp1 -> next == NULL){
printf("
Given node not found in the list!!!");
}
temp2 = temp1;
temp1 = temp1 -> next;
}
temp2 -> next = temp1 -> next;
free(temp1);
printf("
One node deleted!!!
");
}
void display()
{
if(head == NULL)
{
printf("
List is Empty
");
}
else
{
struct Node *temp = head;
printf("
List elements are -
");
while(temp->next != NULL)
{
printf("%d --->",temp->data);
temp = temp->next;
}
printf("%d --->NULL",temp->data);
}
}