Non riesco a capire come mai non elimini l'elemento, però in compenso posso risolverti il mistero del perchè avevi ancora la lista quando mettevi l = NULL.
Quando passi l alla funzione, passi un puntatore ad un oggetto. Ma non passi il puntatore: il puntatore viene passato per valore, non per indirizzo.
Esempio:
Allo stesso modo:codice:void foo (int a) { a++; } ... int x = 10; foo(x); //x vale ancora 10
Questo perchè il suo valore non viene modificato dalla chiamata a funzione, dato che è un argomento.codice:void foo (nodo* n) { n = NULL } ... nodo* p = lista; foo(p); //p sta ancora puntando a lista
Per eliminare un elemento da una lista ti consiglio però la versione ricorsiva dell'algoritmo: la trovo molto più semplice ed elegante.
codice:node* elimina(node* n, int val) { if (val == n->valore) return n->next; else return elimina(n->next, val); }

Rispondi quotando