[c] cancellazione elementi selezionati Clicca QUI per vedere il messaggio nel forum |
maynard80 |
ragazzi scusate sono nel pallone, mi dite come cancellare gli elementi di una lista?
la liste è formata da nodi del tipo
struct nodo{
int x;
int y;
struct nodo *next;
}
voglio cancellare dalla lista tutti i nodi la cui x è n
nodo *cancellaSelezionati(*struct nodo head, int n);
storincoglionendo,pleaseee! |
Skilotto83 |
boh...metti il puntatore dell'elemento n-esimo della lista a null...
Una roba del genere... |
yeah |
code:
nodo *cancella_selezionati(struct nodo *head, int n)
{
struct nodo *found;
while(head->next)
if(head->next->x == n)
{
found = head->next;
head->next = head->next->next;
free(found);
}
return head; /* o cur... non so cosa possa essere più utile */
}
Due considerazioni:
- inizia il controllo dal secondo nodo in lista; questo è un problema derivante dal fatto che non ho ancora trovato un modo per gestire il primo elemento di una lista concatenata.
- non ritorna niente di utile, visto che può cancellare 0 o più nodi
Tutto questo assolutamente non testato :D
[edit] Manca qualcosa...
[edit2] Ora dovrebbe esserci tutto...
[edit3]No, ci sono degli errori...
[edit4]Ora dovrebbe essere a posto :)
|
yeah |
Vedo che in quelle slide si usa la seconda delle due possibilità:
- oggetto 'finto': serve da testa della lista, non memorizza nessun valore;
- puntatore: la lista è iniziata da un puntatore
Personalmente il problema con il secondo tipo è che (primo esempio che mi viene in mente) nel caso:
[ptr] -> [el1] ->[el2]
per eliminare el1 bisogna tener conto del fatto che a sinistra c'è solo un puntatore e non un elemento completo.
Cmq rileggerò le slide con più attenzione :) Grazie |
|
|
|