Advertisement
-nodo-

Linked List

May 29th, 2025
420
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node {
  5.     int value;
  6.     struct node *next;
  7. } node;
  8.  
  9. void print_list(node *head) {
  10.     while (head != NULL) {
  11.         printf("%d -> ", head->value);
  12.         head = head->next;
  13.     }
  14.     printf("NULL\n");
  15. }
  16.  
  17. node *insert_head(node *head, int val) {
  18.     node *new = malloc(sizeof(node));
  19.     new->next = head;
  20.     new->value = val;
  21.     return new;
  22. }
  23.  
  24. void in_order_insert(node **head, int val) {
  25.     node *new = malloc(sizeof(node));
  26.     node **curr = head;
  27.     node **prev = NULL;
  28.  
  29.     while (*curr && val > (*curr)->value) {
  30.         prev = curr;
  31.         curr = &((*curr)->next);
  32.     }
  33.  
  34.     (*prev)->next = new;
  35.     new->next = *curr;
  36. }
  37.  
  38. // void in_order_insert(node **head, int val) {
  39. //     node *new = malloc(sizeof(node));
  40. //     node **prev = NULL;
  41. //     node *curr = *head;
  42.  
  43. //     new->next = NULL;
  44. //     new->value = val;
  45.  
  46. //     if (!*head) {
  47. //         *head = new;
  48. //         return;
  49. //     }
  50.  
  51. //     // printf("looping");
  52. //     while (curr && val > curr->value) {
  53. //         *prev = curr;
  54. //         curr = curr->next;
  55. //     }
  56.  
  57. //     (*prev)->next = new;
  58. //     new->next = curr;
  59.  
  60. //     // return head;
  61.    
  62. //     // printf("insert at:%d\n", curr->value);
  63. // }
  64.  
  65. void append(node **head, int val) {
  66.     node *new = malloc(sizeof(node)), **it;
  67.     new->next = NULL;
  68.     new->value = val;
  69.  
  70.     for (it = head; *it; it = &(*it)->next);
  71.     *it = new;
  72. }
  73.  
  74. void reverse(node **head) {
  75.     node *prev = NULL;
  76.     node *curr = *head;
  77.     node *next;
  78.  
  79.     while (curr != NULL) {
  80.         next = curr->next;
  81.         curr->next = prev;
  82.         prev = curr;
  83.         curr = next;
  84.     }
  85.  
  86.     *head = prev;
  87. }
  88.  
  89. node *find(node *list, int key) {
  90.     while (list && list->value != key)
  91.         list = list->next;
  92.     return list;
  93. }
  94.  
  95. node *delete_list(node *list, node *target) {
  96.     if (list == target) {
  97.         return list->next;
  98.     }
  99.  
  100.     node *prev = NULL;
  101.  
  102.     while (list != target) {
  103.         prev = list;
  104.         list = list->next;
  105.     }
  106.  
  107.     prev->next = list->next;
  108.     free(list);
  109.  
  110.     return list;
  111. }
  112.  
  113. void free_list(node *list) {
  114.     node *next;
  115.  
  116.     while (list != NULL) {
  117.         printf("deleting: %d\n", list->value);
  118.         next = list->next;
  119.         free(list);
  120.         list = next;
  121.     }
  122. }
  123.  
  124. int main() {
  125.     node *list = NULL;
  126.  
  127.     append(&list, 99);
  128.     list = insert_head(list, 10);
  129.     list = insert_head(list, 20);
  130.     print_list(list);
  131.  
  132.     reverse(&list);
  133.  
  134.     list = delete_list(list, find(list, 99));
  135.  
  136.     in_order_insert(&list, 15);
  137.  
  138.     print_list(list);
  139.  
  140.     free_list(list);
  141.  
  142.     return 0;
  143. }
  144.  
  145. void insert_item_end ( node ** head , int val ) {
  146. node * temp = malloc ( sizeof ( node ) ) ;
  147. if (! temp ) return ;
  148. temp -> value = val ;
  149. temp -> next = NULL ;
  150. if (* head ) {
  151. node * ele = * head ;
  152. for( ; ele -> next ; ele = ele -> next ) ;
  153. ele -> next = temp ;
  154. }
  155. else
  156. * head = temp ;
  157. }
  158.  
  159. void append1(node *head, int val) {
  160.     node *new = malloc(sizeof(node));
  161.     new->next = NULL;
  162.     new->value = val;
  163.  
  164.     while (head->next != NULL)
  165.         head = head->next;
  166.  
  167.     head->next = new;
  168. }
  169.  
  170. void append2(node **head, int val) {
  171.     node *new = malloc(sizeof(node));
  172.     new->next = NULL;
  173.     new->value = val;
  174.  
  175.     if (!*head) {
  176.         *head = new;
  177.         return;
  178.     }
  179.  
  180.     node *it = *head;
  181.  
  182.     while (it->next != NULL)
  183.         it = it->next;
  184.  
  185.     it->next = new;
  186. }
  187.  
  188. void append3(node **head, int val) {
  189.     node *new = malloc(sizeof(node));
  190.     new->next = NULL;
  191.     new->value = val;
  192.    
  193.     node **it = head;
  194.     while (*it != NULL)
  195.         it = &((*it)->next); // it = &(**it).next;
  196.  
  197.     *it = new;
  198. }
  199.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement