/* Data una lista ed un elemento x cancellare tutte le ripetizioni di x dalla lista. versione ricorsiva */ lista elimina( lista l, int x ) { if( l == NULL ) return NULL; if( l->dato == x ) return elimina( l->next, x ); l->next = elimina( l->next, x ); return l; } /* versione ricorsiva di coda. copio tutti gli elementi di l diversi da x in una nuova lista. */ lista elimina( lista l, int x, lista new, puntatore coda ) { puntatore p; if( l == NULL ) return new; if( l->dato == x ) return elimina(l->next, x, new, coda); p = l->next; l->next = NULL; /* sgancio il primo elemento dalla lista ... */ if( new == NULL ) /* è il primo? */ return elimina(p, x, l, l); coda->link = l; return elimina(p, x, new, l; }