Eliminare elementi di posto pari in lista

di il
4 risposte

Eliminare elementi di posto pari in lista

Salve a tutti! Sto provando a svolgere un esercizio in cui si chiede di eliminare da una lista gli elementi di posto pari. Il codice che ho scritto invece di eliminare soltanto quelli che si trovano nelle posizione pari e come se mi cancellasse tutta la lista. Ancora non sono entrata bene nella giusta ottica delle liste quindi sto cercando di capire cosa sbaglio.
Il codice che ho scritto è il seguente:
struct elemento *eliminazionepari(struct elemento *p){
struct elemento *aus;
int i;

 for(i=0; p!=NULL; i++){
  if(i%2==0){
  aus=p;
  p=p->next;
  free(aus);
  }
  p=p->next;
 }
return p;
}

4 Risposte

  • Re: Eliminare elementi di posto pari in lista

    Prima di tutto io non utilizzerei il for come hai fatto tu... Rende il codice difficile da capire. Quello che vedo nel codice, comunque, é che manca l'aggiornamento del next....
  • Re: Eliminare elementi di posto pari in lista

    Io invece mi chiederei cosa succede dopo la prima eliminazione
  • Re: Eliminare elementi di posto pari in lista

    Volevo far capire a random_95 che il codice é completamente sbagliato perché manca il cuore, ovvero l'eliminazione di un elemento, che non é solo una chiamata a free ma anche l'aggiornamento del puntatore next dell'elemento precedente... Ora non resta che aspettare che random_95 posti il codice corretto...
  • Re: Eliminare elementi di posto pari in lista

    In modo ricorsivo sono arrivata a soluzione:
    void equalPosRemover(struct elemento **p){
    	struct elemento *temp;
        if((*p)!=NULL && (*p)->next!=NULL){
        	temp=(*p)->next;
    		(*p)->next=((*p)->next)->next;
    		free(temp);
    		equalPosRemover(&((*p)->next));
    	}
    }
Devi accedere o registrarti per scrivere nel forum
4 risposte