Advertisement
Guest User

CancellaPari

a guest
Jul 18th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.29 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct el{
  5.     int info;
  6.     struct el *next;
  7. };
  8.  
  9. typedef struct el ElementoDiLista;
  10.  
  11. void add_h (ElementoDiLista **list, int x);
  12. void add_t (ElementoDiLista **list, int x);
  13. void delete_h (ElementoDiLista **list);
  14. ElementoDiLista* CancellaPari (ElementoDiLista **list);
  15. ElementoDiLista* sortList (ElementoDiLista *list);
  16.  
  17. void printList (ElementoDiLista *list){
  18.     printf("(");
  19.     while(list!= NULL){
  20.         printf("%d ", list->info);
  21.         list = list->next;
  22.     }
  23.     printf(")");
  24. }
  25.  
  26. //Devo cancellare dalla lista gli elementi pari.
  27.  
  28.  
  29. int main (void) {
  30.     ElementoDiLista *lista = NULL;
  31.     int val;
  32.    
  33.     //Se il valore è piu grande di 10 lo metto in testa , se è piu piccolo lo metto in coda.
  34.     // Se il valore è minore di zero termino l'acquisizione.
  35.    
  36.     scanf("%d", &val);
  37.  
  38.     while(val>=0){
  39.         if(val>=10){
  40.         add_h (&lista, val);
  41.         scanf("%d", &val);
  42.         }
  43.         else{
  44.         add_t(&lista, val);
  45.         scanf("%d", &val);
  46.         }
  47.     }
  48.  
  49.     printf("\n");
  50.     printList(lista);
  51.  
  52.     lista = CancellaPari(&lista);
  53.  
  54.     printf("\n");
  55.     printList(lista);
  56.  
  57.    
  58.    
  59.     return 0;
  60. }
  61.  
  62. void add_h (ElementoDiLista **list, int x){
  63.     ElementoDiLista *new = malloc(sizeof(ElementoDiLista));
  64.     new->info = x;
  65.     new->next = *list;
  66.     *list = new;
  67. }
  68.  
  69. void add_t (ElementoDiLista **list, int x){
  70.     ElementoDiLista *new = malloc(sizeof(ElementoDiLista));
  71.     ElementoDiLista *scorr = *list;
  72.    
  73.     new->info = x;
  74.     new->next = NULL;
  75.    
  76.     if(*list == NULL){
  77.         *list = new;
  78.     }
  79.     else{
  80.         while(scorr->next != NULL){
  81.         scorr = scorr->next;
  82.         }
  83.         scorr->next = new;
  84.     }
  85. }
  86.  
  87. void delete_h (ElementoDiLista **list){
  88.     ElementoDiLista *temp = NULL;
  89.     if(*list != NULL){
  90.         if((*list)->next != NULL){
  91.             temp = *list;
  92.             *list = (*list)->next;
  93.             free(temp);
  94.         }
  95.         else{
  96.             temp = *list;
  97.             *list = NULL;
  98.             free(temp);
  99.         }
  100.     }
  101. }
  102.  
  103.  
  104. ElementoDiLista* CancellaPari (ElementoDiLista **list){
  105.     ElementoDiLista *prec = NULL;
  106.     ElementoDiLista *scorr = *list;
  107.     ElementoDiLista *temp = NULL;
  108.     while (scorr != NULL){
  109.         if(scorr->info % 2 != 0){
  110.             prec = scorr;
  111.             scorr = scorr->next;
  112.         }
  113.         else{
  114.             if(prec == NULL){
  115.                 delete_h(&(*list));
  116.                 scorr = scorr->next;
  117.             }
  118.             else{
  119.                 temp = scorr;
  120.                 prec->next = scorr->next;
  121.                 scorr = scorr->next;
  122.                 free(temp);
  123.             }
  124.         }
  125.     }
  126.  
  127.     return *list;
  128.  
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement