Originariamente inviato da SpecialOne1992
perché non hanno senso quelle due righe di codice?
Assegni una nuova area di memoria (un indirizzo) e subito cambi questa area a quella di cur (al suo indirizzo per la precisione), non copii il contenuto di cur i aus, ma il suo indirizzo.
poi scusami non ho capito come vorresti implementare il flag
Gli elementi dispari tu intendevi dispari per posizione (almeno per quanto hai scritto), per cui saranno uno pari e uno dispari in successione (dipende ovviamente se intendi partire da 1 o da 0) quindi la chiamata:
codice:
disp_list(list, 1);
Farà avverare il primo if e chiamerà se stessa in ricorsione come
codice:
cur->next = disp_list(cur->next, !flag);
flag cambia da 1 a 0 per effetto del ! e nella seconda chiamata l'if risulterà falso e si richiamerà la funzione dinuovo con
codice:
disp_list(cur->next, !flag);
saltando un elemento ma cambiando flag da 0 a 1 (sarebbe un qualsiasi valore non 0 in realtà, ma puoi considerarlo 1) e così fino alla fine, ovviamente con i dovuti controlli...

Io vedo più pulita l'ultima possibilità, quella semplificata, poi vedi tu...