Advertisement
NealPeteros

Untitled

May 11th, 2023
1,356
1
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.72 KB | None | 1 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct node {
  5.     int value;
  6.     struct node *next;
  7. };
  8.  
  9. struct node *start=NULL;
  10.  
  11. struct node *sll_new_node() {
  12.     struct node *new_node;
  13.    
  14.     new_node = (struct node*) malloc(sizeof(struct node));
  15.     if(new_node == NULL) {
  16.         printf("Out of Memory\n");
  17.         exit(1);
  18.     }
  19.    
  20.     return new_node;
  21. }
  22.  
  23. void sll_insert_first(int value) {
  24.     struct node *new_node;
  25.    
  26.     new_node = sll_new_node();
  27.    
  28.     new_node->value = value;
  29.     new_node->next = start;
  30.     start = new_node;
  31. }
  32.  
  33. void sll_insert_last(int value) {
  34.     struct node *new_node;
  35.    
  36.     new_node = sll_new_node(); // creates new node
  37.    
  38.     new_node->value = value; // sets the new node's value
  39.     new_node->next = NULL; // sets the next node's value to NULL
  40.    
  41.     if(start == NULL) { // if no node to start
  42.         start = new_node;
  43.     } else {
  44.         struct node *temp;
  45.        
  46.         temp = start; // set temp to start
  47.         while(temp->next != NULL) { // loop until temp is at the last node
  48.             temp = temp->next; // set temp to next until loop finishes
  49.         }
  50.         temp->next = new_node; // set the next node after temp (last) to the new_node
  51.     }
  52. }
  53.  
  54. void sll_insert_at(int position, int value) {
  55.    
  56.     if(start == NULL || position == 0) {
  57.         sll_insert_first(value);
  58.     } else {
  59.         struct node *new_node;
  60.         int i;
  61.        
  62.         new_node = sll_new_node();
  63.         new_node->value = value;
  64.    
  65.         struct node *temp;
  66.         temp = start;
  67.         while(i != position-1) { // loop until i = position-1
  68.             if(temp->next == NULL) { // if it reaches last node
  69.                 sll_insert_last(value);
  70.                 return;
  71.             } else {
  72.                 temp = temp->next; // set temp to the next node until...
  73.                 i++;
  74.             }
  75.         }
  76.         new_node->next = temp->next; //set the next node of new_node to the next node of temp
  77.         temp->next = new_node; // set the next node of temp to the new node
  78.     }
  79. }
  80.  
  81. void sll_delete_first() {
  82.     struct node *deleted_node;
  83.    
  84.     if(start == NULL) { // if no node to delete
  85.         printf("No node to delete\n");
  86.     } else {
  87.         deleted_node = start; // set deleted_node to first node
  88.         start = start->next; // set the next node to start
  89.         free(deleted_node); // remove the first node
  90.     }
  91. }
  92.  
  93. void sll_delete_last() {
  94.    
  95.     if(start == NULL) { // if no node to delete
  96.             printf("No node to delete\n");
  97.     } else {
  98.         if(start->next == NULL) { // if only one node
  99.             sll_delete_first();
  100.         } else {
  101.  
  102.             struct node *deleted_node;
  103.             struct node *new_last_node;
  104.        
  105.             deleted_node = start; // set deleted_node to start
  106.             while(deleted_node->next != NULL) {
  107.                 new_last_node = deleted_node; // set new_last_node to node before last
  108.                 deleted_node = deleted_node->next; // set deleted_node to last node
  109.             }
  110.             new_last_node->next = NULL; // set new_last_node to NULL (end of list)
  111.             free(deleted_node);  // remove deleted_node (last node)
  112.         }
  113.     }
  114. }
  115.  
  116. void sll_delete_at(int position) {
  117.     int i;
  118.     if(start == NULL) { // if no node to delete
  119.         printf("No node to delete\n");
  120.     } else {
  121.         if(start->next == NULL || position == 0) { // if only one node or position == 0
  122.             sll_delete_first();
  123.         } else {
  124.             struct node *deleted_node;
  125.             struct node *temp;
  126.        
  127.             deleted_node = start; // set deleted_node to start
  128.             while(i != position) { // loop until i = position-1
  129.                 if(deleted_node->next == NULL) { // if it reaches last node
  130.                     sll_delete_last();
  131.                     return;
  132.                 } else {
  133.                     temp = deleted_node; // set temp to deleted_node
  134.                     deleted_node = deleted_node->next; // set deleted_node to the next node until...
  135.                     i++;
  136.                 }
  137.             }
  138.             temp->next = deleted_node->next; //set the next node of temp to the next node of deleted_node
  139.             free(deleted_node);
  140.         }
  141.     }
  142. }
  143.  
  144. void sll_delete_value(int value) {
  145.     if(start == NULL) { // if no node to delete
  146.             printf("No node to delete\n");
  147.     } else {
  148.         if(start->next == NULL) { // if only one node
  149.             sll_delete_first();
  150.         } else {
  151.             struct node *temp;
  152.             int i = 0;
  153.    
  154.             temp = start;
  155.            
  156.             while(temp != NULL) {
  157.                 if(temp->value == value) {
  158.                     sll_delete_at(i);
  159.                     return;
  160.                 } else {
  161.                     i++;
  162.                     temp = temp->next;
  163.                 }
  164.             }
  165.             printf("Value (%d) not found!\n", value);
  166.         }
  167.     }
  168. }
  169.  
  170. void sll_print_list() {
  171.     struct node *temp;
  172.    
  173.     temp = start;
  174.    
  175.     while(temp != NULL) {
  176.         printf("%d ", temp->value);
  177.         temp = temp->next;
  178.     }
  179.    
  180.     printf("\n");
  181. }
  182.  
  183. void sll_print_at(int position) {
  184.     struct node *temp;
  185.     int i;
  186.    
  187.     if(start == NULL) { // if no node to print
  188.         printf("No node to print\n");
  189.     } else {
  190.    
  191.         temp = start; // set temp to first
  192.        
  193.         while(i != position) { // loop until i = position
  194.             if(temp->next == NULL) { // if it reaches last node
  195.                 printf("No existing node on that position!");
  196.                 exit(1);
  197.             } else {
  198.                 temp = temp->next; // set temp to the next node
  199.                 i++;
  200.             }
  201.         }      
  202.         printf("Position (%d) value: %d \n", position, temp->value);
  203.     }
  204. }
  205.  
  206. void sll_count() {
  207.     struct node *temp;
  208.     int i = 0;
  209.    
  210.     temp = start;
  211.    
  212.     while(temp != NULL) {
  213.         i++;
  214.         temp = temp->next;
  215.     }
  216.    
  217.     printf("\nCount of Linked Lists: %d", i);  
  218. }
  219.  
  220. int main(void) {
  221.    
  222.     printf("SLL_INSERT_FIRST(10): "); sll_insert_first(10);sll_print_list();
  223.     printf("\nSLL_INSERT_FIRST(20): "); sll_insert_first(20);sll_print_list();
  224.     printf("\nSLL_INSERT_FIRST(30): "); sll_insert_first(30);sll_print_list();
  225.     printf("\nSLL_INSERT_FIRST(40): "); sll_insert_first(40);sll_print_list();
  226.     printf("\nSLL_INSERT_LAST(50): "); sll_insert_last(50); sll_print_list();
  227.     printf("\nSLL_DELETE_FIRST: "); sll_delete_first(); sll_print_list();
  228.     printf("\nSLL_PRINT_AT(3): "); sll_print_at(3);
  229.     printf("\nSLL_INSERT_AT(0, 31): "); sll_insert_at(0, 31); sll_print_list();
  230.     printf("\nSLL_DELETE_AT(0): "); sll_delete_at(0); sll_print_list();
  231.     printf("\nSLL_DELETE_VALUE(50): "); sll_delete_value(50); sll_print_list();
  232.     printf("\nSLL_COUNT(): "); sll_count();
  233.    
  234.    
  235.    
  236.     return 0;
  237. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement