Advertisement
Guest User

LINKED LIST

a guest
Jan 20th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. struct node {
  4.   int data;
  5.   struct node *next;
  6. };
  7.  
  8. struct node *start = NULL;
  9. void insert_at_begin(int);
  10. void insert_at_end(int);
  11. void traverse();
  12. void delete_from_begin();
  13. void delete_from_end();
  14. int count = 0;
  15.  
  16. int main () {
  17.   int i, data;
  18.  
  19.   for (;;) {
  20.     printf("1. Insert an element at the beginning of linked list.\n");
  21.     printf("2. Insert an element at the end of linked list.\n");
  22.     printf("3. Traverse linked list.\n");
  23.     printf("4. Delete an element from beginning.\n");
  24.     printf("5. Delete an element from end.\n");
  25.     printf("6. Exit\n");
  26.  
  27.     scanf("%d", &i);
  28.  
  29.     if (i == 1)
  30.     {
  31.       printf("Enter value of element\n");
  32.       scanf("%d", &data);
  33.       insert_at_begin(data);
  34.     }
  35.     else if (i == 2)
  36.     {
  37.       printf("Enter value of element\n");
  38.       scanf("%d", &data);
  39.       insert_at_end(data);
  40.     }
  41.     else if (i == 3)
  42.       traverse();
  43.     else if (i == 4)
  44.       delete_from_begin();
  45.     else if (i == 5)
  46.       delete_from_end();
  47.     else if (i == 6)
  48.       break;
  49.     else
  50.       printf("Please enter valid input.\n");
  51.   }
  52.  
  53.   return 0;
  54. }
  55.  
  56. void insert_at_begin(int x) {
  57.   struct node *t;
  58.  
  59.   t = (struct node*)malloc(sizeof(struct node));
  60.   t->data = x;
  61.   count++;
  62.  
  63.   if (start == NULL) {
  64.     start = t;
  65.     start->next = NULL;
  66.     return;
  67.   }
  68.  
  69.   t->next = start;
  70.   start = t;
  71. }
  72.  
  73. void insert_at_end(int x) {
  74.   struct node *t, *temp;
  75.  
  76.   t = (struct node*)malloc(sizeof(struct node));
  77.   t->data = x;
  78.   count++;
  79.  
  80.   if (start == NULL) {
  81.     start = t;
  82.     start->next = NULL;
  83.     return;
  84.   }
  85.  
  86.   temp = start;
  87.  
  88.   while (temp->next != NULL)
  89.     {temp = temp->next;}
  90.  
  91.   temp->next = t;
  92.   t->next   = NULL;
  93. }
  94.  
  95. void traverse() {
  96.   struct node *t;
  97.  
  98.   t = start;
  99.  
  100.   if (t == NULL) {
  101.     printf("Linked list is empty.\n");
  102.     return;
  103.   }
  104.  
  105.   printf("There are %d elements in linked list.\n", count);
  106.  
  107.   while (t->next != NULL) {
  108.     printf("%d\n", t->data);
  109.     t = t->next;
  110.   }
  111.   printf("%d\n", t->data); // Print last node
  112. }
  113.  
  114. void delete_from_begin() {
  115.   struct node *t;
  116.   int n;
  117.  
  118.   if (start == NULL) {
  119.     printf("Linked list is empty.\n");
  120.     return;
  121.   }
  122.  
  123.   n = start->data;
  124.   t = start->next;
  125.   free(start);
  126.   start = t;
  127.   count--;
  128.  
  129.   printf("%d deleted from the beginning successfully.\n", n);
  130. }
  131.  
  132. void delete_from_end() {
  133.   struct node *t, *u;
  134.   int n;
  135.  
  136.   if (start == NULL) {
  137.     printf("Linked list is empty.\n");
  138.     return;
  139.   }
  140.  
  141.   count--;
  142.  
  143.   if (start->next == NULL) {
  144.     n = start->data;
  145.     free(start);
  146.     start = NULL;
  147.     printf("%d deleted from end successfully.\n", n);
  148.     return;
  149.   }
  150.   t = start;
  151.  
  152.   while (t->next != NULL) {
  153.     u = t;
  154.     t = t->next;
  155.   }
  156.  
  157.   n = t->data;
  158.   u->next = NULL;
  159.   free(t);
  160.  
  161.   printf("%d deleted from end successfully.\n", n);
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement