Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Tallid
    Registrato dal
    Jan 2009
    Messaggi
    76

    eliminare elementi dispari (ricorsivo) da lista c

    Data una struttura Lista del tipo
    codice:
    typedef struct elem{          
                  int info;
                  struct elem *next; 
    }elem;  
    typedef elem *Lista;
    Ho scritto una funzione che avrebbe il compito di eliminare gli elementi dispari di un Lista(necessariamente ricorsiva):
    codice:
    Lista eliminaDispari(Lista lst){ 
                 if (lst==NULL)return NULL;
           if(lst->info%2==0)return lst->next=eliminaDispari(lst->next);
           return eliminaDispari(lst->next);       
    }
    Sono pressoche convinto del funzionamento corretto di tale funzione ma quando
    eseguo il codice:
    codice:
           Lista lst;
           //inizializzo lst
           Lista lst2=eliminaDispari(lst);
           printf("%d ->",lst2->info);
    il programma va in crash perchè lst2 punta a NULL, come posso fare per far si che la lista ritornata punti al primo elemento?

  2. #2
    Utente di HTML.it L'avatar di Tallid
    Registrato dal
    Jan 2009
    Messaggi
    76
    ok ho risolto così

    codice:
           Lista aggiungi(Lista l,int val){ 
                 if(val%2!=0)return l;
           else{        
               Lista tmp=(Lista)malloc(sizeof(elem)); 
               tmp->info=val;      
               tmp->next=l;
               l=tmp;
               return l;
              }
    }   
    Lista eliminaDispari(Lista lst){
                  if (lst==NULL)return NULL;
           return aggiungi(eliminaDispari(lst->next),lst->info);
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Volendo puoi dare uno sguardo alla soluzione proposta in questo post. Basta riadattarla (cioè praticamente mettere % 2 anziché < 0).
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.