Advertisement
Idanref

Linked List - C

Mar 17th, 2021 (edited)
458
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.60 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. typedef struct Node
  6. {
  7.     int value;
  8.     struct Node *next;
  9. } node;
  10.  
  11.  
  12. node *create_node(int data);
  13. node *insert(node *head, int data);
  14. void print_list(node *head);
  15.  
  16.  
  17. node *create_node(int data)
  18. {
  19.     node *temp = (node *)malloc(sizeof(node));
  20.     temp->value = data; // current pointer
  21.     temp->next = NULL;
  22.     return temp;
  23. }
  24.  
  25.  
  26. node *insert(node *head, int data)
  27. {
  28.     // 1 -> 2 -> 3 -> NULL
  29.     // -> NULL
  30.  
  31.     node *temp = head;
  32.  
  33.     if(head == NULL) // 1 item
  34.     {
  35.         head = create_node(data);
  36.     }
  37.  
  38.     else
  39.     {
  40.         while(temp->next != NULL)
  41.         {
  42.             temp = temp->next;
  43.         }
  44.  
  45.         temp->next = create_node(data);
  46.     }
  47.  
  48.     return head;
  49. }
  50.  
  51. void print_list(node *head)
  52. {
  53.     node *temp = head;
  54.     if(head == NULL)
  55.     {
  56.         printf("\nList is empty!\n");
  57.     }
  58.  
  59.     else {
  60.  
  61.         printf("\n\n");
  62.  
  63.         while (temp->next != NULL)
  64.         {
  65.             printf("%d -> ", temp->value);
  66.             temp = temp->next;
  67.         }
  68.         printf("%d\n\n", temp->value);
  69.     }
  70. }
  71.  
  72. node* remove_last_item(node *head)
  73. {
  74.     // 1>3>5>6>NULL
  75.     node *temp = head;
  76.     node *delete_node;
  77.  
  78.     if(head == NULL)
  79.         printf("\nList is empty!\n");
  80.  
  81.     else if(temp->next == NULL)
  82.     {
  83.         delete_node = temp;
  84.         head = NULL;
  85.         free(delete_node);
  86.     }
  87.  
  88.     else
  89.     {
  90.         while(temp->next->next != NULL)
  91.         {
  92.             temp = temp->next;
  93.         }
  94.  
  95.         delete_node = temp->next;
  96.         temp->next = NULL;
  97.         free(delete_node);
  98.     }
  99.  
  100.     return head;
  101. }
  102.  
  103.  
  104. node* remove_item(node *head, int num)
  105. {
  106.     // 1>3>5>6>NULL
  107.     node *temp = head;
  108.     node *delete_node;
  109.  
  110.     if(head == NULL)
  111.         printf("\nList is empty!\n");
  112.  
  113.     else if(temp->value == num)
  114.     {
  115.         delete_node = temp;
  116.         free(delete_node);
  117.         head = temp->next;
  118.         return head;
  119.     }
  120.  
  121.     else
  122.     {
  123.         while(temp->next != NULL)
  124.         {
  125.             if(temp->next->value == num)
  126.             {
  127.                 delete_node = temp->next;
  128.                 temp->next = temp->next->next;
  129.                 free(delete_node);
  130.                 return head;
  131.             }
  132.             temp = temp->next;
  133.         }
  134.  
  135.         if(temp->next == NULL && temp->value != num)
  136.         {
  137.             printf("Didn't find!\n");
  138.             return head;
  139.         }
  140.     }
  141.  
  142.     return head;
  143. }
  144.  
  145. void delete_list(node** head)
  146. {
  147.     // 1>3>10>12>NULL
  148.     // 1>10>12>NULL
  149.  
  150.     node *delete_node;
  151.  
  152.     if (*head == NULL)
  153.         printf("List is empty!");
  154.  
  155.     else
  156.     {
  157.         while (*head != NULL)
  158.         {
  159.             delete_node = *head;
  160.             *head = (*head)->next;
  161.             free(delete_node);
  162.         }
  163.  
  164.         *head = NULL;
  165.         printf("\nList cleared!");
  166.     }
  167. }
  168.  
  169. int func(node **head_even, node **head_odd)
  170. {
  171.     printf("\nPlease enter values.\nEnter -1 to stop.\n\n");
  172.  
  173.     int input, counter = 0;
  174.  
  175.     scanf("%d", &input);
  176.     counter++;
  177.  
  178.     while(input != -1)
  179.     {
  180.         if(input % 2 == 0)
  181.             *head_even = insert(*head_even, input);
  182.  
  183.         else
  184.             *head_odd = insert(*head_odd, input);
  185.  
  186.         counter++;
  187.         scanf("%d", &input);
  188.     }
  189.  
  190.     return counter-1;
  191. }
  192.  
  193.  
  194. int func2(node *head, int *pass_min, int *pass_max)
  195. {
  196.     // 1,3,5,6,7
  197.  
  198.     if(head == NULL)
  199.     {
  200.         *pass_min = 0;
  201.         *pass_max = 0;
  202.         return 0;
  203.     }
  204.  
  205.     int sum = 0;
  206.     int max = head->value;
  207.     int min = head->value;
  208.  
  209.     sum += head->value;
  210.     node *temp = head;
  211.  
  212.     if(temp->next == NULL)
  213.     {
  214.         *pass_min = min;
  215.         *pass_max = max;
  216.         return sum;
  217.     }
  218.  
  219.     temp = temp->next;
  220.  
  221.     while(temp != NULL)
  222.     {
  223.         sum += temp->value;
  224.        
  225.         if(temp->value >= max)
  226.             max = temp->value;
  227.  
  228.         if(temp->value <= min)
  229.             min = temp->value;
  230.  
  231.         temp = temp->next;
  232.     }
  233.  
  234.     *pass_max = max;
  235.     *pass_min = min;
  236.  
  237.     return sum;
  238. }
  239.  
  240. void print_value(int x)
  241. {
  242.     printf("\n%d\n", x);
  243. }
  244.  
  245. void main()
  246. {
  247.     node *head_even = NULL;
  248.     node *head_odd = NULL;
  249.  
  250.     int counter = func(&head_even, &head_odd);
  251.  
  252.     printf("\n\nEven List:");
  253.     print_list(head_even);
  254.  
  255.     printf("\nOdd List:");
  256.     print_list(head_odd);
  257.  
  258.     printf("\nCounter: %d\n\n", counter);
  259.  
  260.  
  261.     int min, max;
  262.     int sum = func2(head_even, &min, &max);
  263.  
  264.  
  265.     print_value(min);
  266.     print_value(max);
  267.     print_value(sum);
  268.    
  269.     delete_list(&head_even);
  270.     delete_list(&head_odd);
  271. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement