informaticage

Linked List Sample Implementation

Feb 11th, 2021 (edited)
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.26 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node
  5. {
  6.     int value;
  7.     struct node *next;
  8. } node_t;
  9.  
  10. node_t *new_node(int value)
  11. {
  12.     node_t *node = (node_t *)malloc(sizeof(node_t));
  13.     node->value = value;
  14.     node->next = NULL;
  15.  
  16.     return node;
  17. }
  18.  
  19. void print_list(node_t *head)
  20. {
  21.     node_t *head_it = head;
  22.  
  23.     while (head_it != NULL)
  24.     {
  25.         printf("%d -> ", head_it->value);
  26.         head_it = head_it->next;
  27.     }
  28.  
  29.     printf("NULL");
  30. }
  31.  
  32. node_t *append_node(node_t *head, int value)
  33. {
  34.     node_t *head_it = head;
  35.  
  36.     if (head_it == NULL)
  37.     {
  38.         return new_node(value);
  39.     }
  40.  
  41.     while (head_it->next != NULL)
  42.     {
  43.         head_it = head_it->next;
  44.     }
  45.  
  46.     // head_it->next = NULL
  47.     head_it->next = new_node(value);
  48.  
  49.     return head;
  50. }
  51.  
  52. node_t *attach_node(node_t *head, int value)
  53. {
  54.     node_t *new_head = new_node(value);
  55.     new_head->next = head;
  56.     return new_head;
  57. }
  58.  
  59. node_t *insert_at(node_t *head, size_t index, int value)
  60. {
  61.     node_t *head_it = head;
  62.  
  63.     if (index == 0)
  64.     {
  65.         return attach_node(head, value);
  66.     }
  67.  
  68.     if (head_it == NULL)
  69.     {
  70.         // If list is empty
  71.         return new_node(value);
  72.     }
  73.  
  74.     for (size_t i = 0; i < index - 1 && head_it->next != NULL; i++)
  75.     {
  76.         head_it = head_it->next;
  77.     }
  78.  
  79.     // i == index or head->next = NULL
  80.     if (head_it->next == NULL)
  81.     {
  82.         // Raggiunto fine della lista
  83.         head_it->next = new_node(value);
  84.  
  85.         return head;
  86.     }
  87.  
  88.     // i = index
  89.  
  90.     // head -> headNext
  91.     // head -> new_node(value)
  92.     // new_node->next = head->next()
  93.     node_t *link = head_it->next;
  94.     head_it->next = new_node(value);
  95.     head_it->next->next = link;
  96.  
  97.     return head;
  98. }
  99.  
  100. int main(void)
  101. {
  102.     node_t *head = new_node(10);
  103.     head->next = new_node(33);
  104.     head->next->next = new_node(100);
  105.  
  106.     print_list(head);
  107.     printf("\n\n");
  108.  
  109.     head = attach_node(head, 66);
  110.     head = attach_node(head, 77);
  111.  
  112.     print_list(head);
  113.     printf("\n\n");
  114.  
  115.     head = append_node(head, 123);
  116.     head = append_node(head, 321);
  117.  
  118.     print_list(head);
  119.     printf("\n\n");
  120.  
  121.     head = insert_at(head, 6, 777);
  122.  
  123.     print_list(head);
  124.     printf("\n\n");
  125.     return 0;
  126. }
Add Comment
Please, Sign In to add comment