AleksandarArkan

L-elimina numeri pari dalla lista

Apr 16th, 2015
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //attenzione la funzione che cancella i pari, funziona in buona
  5. //parte dei casi, tranne in quelli dove gli elementi da cancellare sono
  6. //consecutivi
  7.  struct elemento {
  8.      int num;
  9.      struct elemento *next;
  10.      };
  11.      
  12. //funzione uno crea lista con una seq di interi in input
  13.  
  14. struct elemento *creaListaSeq(){
  15.     int numero;
  16.     struct elemento *primo=NULL;
  17.     struct elemento *puntatore;
  18.    
  19.     printf("Inserisci il primo numero:\n");
  20.     scanf("%d",&numero);
  21.    
  22.     //se ha inserito zero termina subito
  23.     if(numero==0)
  24.         return primo;
  25.    
  26.     if(numero!=0){
  27.         primo=malloc(sizeof(struct elemento));
  28.         primo->num=numero;
  29.         }
  30.     puntatore=primo;
  31.     //ora faccio gli altri elementi
  32.     //lettura del prosssimo numero
  33.     printf("Inserisci il numero:\n");
  34.     scanf("%d",&numero);
  35.    
  36.     while(numero!=0){
  37.         puntatore->next=malloc(sizeof(struct elemento));
  38.         puntatore=puntatore->next;
  39.         puntatore->num=numero;
  40.         printf("Inserisci il numero:\n");
  41.         scanf("%d",&numero);
  42.         }
  43.     puntatore->next=NULL;
  44.    
  45.     return primo;
  46.     }
  47.  
  48.  
  49. //elimina pari
  50. void cancella2(struct elemento *lista){
  51.     struct elemento *prev;
  52.     prev=NULL;
  53.     //controllo primo elemento
  54.     //questo pezzo mi elimina il primo elemento se
  55.     //necessario
  56.     struct elemento *punt;
  57.     punt=lista;
  58.     if(lista->num%2==0){
  59.         if(punt->next==NULL)
  60.             lista=NULL;
  61.         else
  62.             lista=punt->next;
  63.        
  64.         free(punt);
  65.         }
  66.     //------------------------------
  67.    
  68.     while(lista){
  69.         if(lista->num%2==0){
  70.             prev->next=lista->next;
  71.             free(lista);
  72.             lista=prev->next;
  73.         }
  74.         else{
  75.             prev=lista;
  76.             lista=lista->next;
  77.             }
  78.     }
  79. }
  80.  
  81.  
  82.  
  83.  
  84. //main
  85.  
  86. int main(){
  87.     struct elemento *lista;
  88.     lista=creaListaSeq();
  89.     cancella2(lista);
  90.     while(lista!=NULL){
  91.         printf("%d-->", lista->num);
  92.         lista=lista->next;
  93.         }
  94.    
  95.     return 0;
  96.     }
Advertisement
Add Comment
Please, Sign In to add comment