Advertisement
Bewin

Linked List

Nov 15th, 2023
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.42 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node{
  5.     int data;
  6.     struct node* next;
  7. };
  8. struct node* head = NULL;
  9. void menu(){
  10.     printf("\n******************");
  11.     printf("\nEnter your choice:\n");
  12.     printf("1. Insert at Beginning\t");
  13.     printf("\t2. Insert at End\t");
  14.     printf("3. Insert at Position\n");
  15.     printf("4. Delete from Beginning\t");
  16.     printf("5. Delete from End\t");
  17.     printf("6. Delete from Position\n");
  18.     printf("7. Display\n");
  19.     printf("0. Exit");
  20.     printf("\n******************\n");
  21. }
  22. void display() {
  23.     if (head == NULL){
  24.         printf("Empty List.\n");
  25.     return;
  26.     }
  27.     struct node* current=head;
  28.     while(current!=NULL){
  29.         printf("%d\t",current->data);
  30.         current=current->next;
  31.     }
  32. }
  33. void insertAtFront(){
  34.     struct node* new_node;
  35.     new_node=(struct node*)malloc(sizeof(struct node));
  36.     printf("Enter Data in new node:");
  37.     scanf("%d",&new_node->data);
  38.     new_node->next=NULL;
  39.     if (head==NULL) {
  40.         head = new_node;
  41.         return;
  42.     }
  43.     new_node->next=head;
  44.     head = new_node;
  45. }
  46. void insertAtEnd(){
  47.     struct node* new_node;
  48.     new_node=(struct node*)malloc(sizeof(struct node));
  49.     printf("Enter Data in new node:");
  50.     scanf("%d",&new_node->data);
  51.     new_node->next=NULL;
  52.     if (head==NULL) {
  53.         head = new_node;
  54.         return;
  55.     }
  56.     struct node* current= head;
  57.     while (current->next!=NULL){
  58.         current=current->next;
  59.     }
  60.     current->next=new_node;
  61. }
  62. void insertAtPos(){
  63.     struct node* new_node;
  64.     new_node=(struct node*)malloc(sizeof(struct node));
  65.     printf("Enter Data in new node:");
  66.     scanf("%d",&new_node->data);
  67.     new_node->next=NULL;
  68.     if (head==NULL){
  69.         printf("Empty list\n");
  70.     }
  71.     int key;
  72.     printf("Enter the key to be searched:");
  73.     scanf("%d",&key);
  74.     if (head->data==key) {
  75.         head->next = new_node;
  76.         return;
  77.     } else {
  78.         struct node* temp = head;
  79.         while (temp!=NULL && temp->data!=key){
  80.             temp=temp->next;
  81.         }
  82.         if(temp==NULL) {
  83.             printf("Key not found in list!\n");
  84.             return;
  85.         }
  86.         new_node->next=temp->next;
  87.         temp->next=new_node;
  88.         printf("Item inserted after %d\n",key);
  89.     }
  90. }
  91. void deleteAtFront(){
  92.     if (head==NULL){
  93.         printf("Empty List!\n");
  94.         return;
  95.     }
  96.     struct node* temp=head;
  97.     head=head->next;
  98.     free(temp);
  99. }
  100. void deleteAtEnd(){
  101.     if (head==NULL){
  102.         printf("Empty List!\n");
  103.         return;
  104.     }
  105.     struct node *temp = head;
  106.     struct node *prev = head;
  107.     if (head->next==NULL)
  108.         head=NULL;
  109.     else {
  110.         while (temp->next != NULL) {
  111.             prev = temp;
  112.             temp = temp->next;
  113.         }
  114.         prev->next = NULL;
  115.     }
  116.     free(temp);
  117. }
  118. void deleteAtPos(){
  119.     int flag=0;
  120.     if (head==NULL){
  121.         printf("Empty List!\n");
  122.         return;
  123.     }
  124.     int key;
  125.     printf("Enter data to be deleted:");
  126.     scanf("%d",&key);
  127.     struct node* temp=head;
  128.     struct node* prev;
  129.     if(head->data==key && head->next==NULL){
  130.         flag=1;
  131.         head=NULL;
  132.     } else if (head->data==key && head->next!=NULL){
  133.         flag=1;
  134.         head=head->next;
  135.     } else{
  136.         while (temp->next!=NULL) {
  137.             prev = temp;
  138.             temp = temp->next;
  139.             if (temp->data==key) {
  140.                 flag = 1;
  141.                 break;
  142.             }
  143.         }
  144.         if(flag==1){
  145.             prev->next=temp->next;
  146.         }
  147.     }
  148.     if (flag==0) {
  149.         printf("Key not found!");
  150.         return;
  151.     }
  152.     free(temp);
  153. }
  154. int main() {
  155.     int arg;
  156.     while(1){
  157.         menu();
  158.         scanf("%d",&arg);
  159.         switch(arg){
  160.             case 1:
  161.                 insertAtFront();
  162.                 break;
  163.             case 2:
  164.                 insertAtEnd();
  165.                 break;
  166.             case 3:
  167.                 insertAtPos();
  168.                 break;
  169.             case 4:
  170.                 deleteAtFront();
  171.                 break;
  172.             case 5:
  173.                 deleteAtEnd();
  174.                 break;
  175.             case 6:
  176.                 deleteAtPos();
  177.                 break;
  178.             case 7:
  179.                 display();
  180.                 break;
  181.             case 0:
  182.                 exit(0);
  183.             default:
  184.                 printf("Invalid Argument!");
  185.                 break;
  186.         }
  187.     }
  188. }
  189.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement