dato che sono in partenza per andare a nanna (sarebbe anche ora xD) non mi soffermo a leggere il codice se no non vado piu' a nanna..
cmq per cancellare un elemento dalla lista dichiari un po' di puntatori alla stuttura della lista e inizi a scorrerla, quando determini che un elemento va eliminato ovviamente significa che hai un puntatore alla stuttura che stai valutando, quindi a noi cosa interessa avere ? un puntatore aggiornato a ogni scorrimento che punti alla struttura precedente di quella che stiamo valutando, un puntatore per salvare l'indirizzo dell'elemento successivo della lista a quello che stiamo valutando, nel momento in cui devi cancellare un elemento non fai altro che:
1) determinarlo
2) "torni indietro" con il puntatore che punta alla struttura precedente
3) salvi in precedente.next il valore di attuale.next
4) esegui una free con attuale ed ecco eliminato un elemento dalla lista...
invertire il contenuto di una lista e' piu' complesso ok ma il trucco e' sempre quello :P
la seconda lista devi ovviamente concatenarla "al contrario" ovvero tu parti a scorrere la lista input e salvi il puntatore alla lista nella seconda lista, poi scorri avanti di 1 e salvi la struct letta che invece di essere la prima diventa l'ultima, quindi il campo next della struct lo inizializzi con il puntatore che utilizzi per gestire la prima lista :P
non so se sono stato chiaro ma come ha detto byaur basta scorrere la lista in input e creare una seconda lista dove invece che concatenare alla fine concateni all'inizio e' abbastanza facile :P


Rispondi quotando