Ciao a tutti
devo fare una funzione ricorsiva che prende in input una lista concatenata e restituisce la lista senza gli elementi in posizione pari.
sapete come si fa?
Ciao a tutti
devo fare una funzione ricorsiva che prende in input una lista concatenata e restituisce la lista senza gli elementi in posizione pari.
sapete come si fa?
struct foo * kill(struct foo *current){
if(current != NULL){
current->next = current->next->next;
kill(current->next);
}
return current;
}
La funzione la invochi passandole il primo elemento della lista
ex. first = kill(first);
Gli elementi nn vengono eliminati fisicamente, ma solo tolti dalla lista. Basta inserirgli il free...
Live fast. Troll hard.
Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
Team Lead @Gameloft Barcelona
grazie amico funziona bene.
io sono riuscito a fare questa versione
LIST togli_pari(LIST L)
{
LIST pnode;
if (L == NULL)
return L;
else
{
pnode = L->next;
L->next = togli_pari(pnode->next);
return L;
}
}
In questa c'è un problema, current->next potrebbe essere NULL e quindi non ha senzo current->next->next;codice:if(current != NULL){ current->next = current->next->next; kill(current->next); } return current; }
lo stesso vale anke qui... pnode potrebbe essere NULL e quindi non ha senza pnode->nextcodice:LIST togli_pari(LIST L) { LIST pnode; if (L == NULL) return L; else { pnode = L->next; L->next = togli_pari(pnode->next); return L; } }
e cmq in entrambi c'è molto garbage (memoria non liberata)...
codice:if(current != NULL){ if (current->next != NULL) { aux = current->next; current->next = current->next->next; free(aux); } kill(current->next); } return current; }codice:LIST togli_pari(LIST L) { LIST pnode; if (L != NULL) { pnode = L->next; if (pnode != NULL) L->next = togli_pari(pnode->next); else L->next = NULL; free(pnode); } return L; }
hai ragione amico la mia versione funziona solo con una lista che ha un numero di elementi pari, con una lista con numero di elementi dispari crasha.