io ti direi di fare cosi: creati una funzione di scambio di due elementi di tipo lista *, in modo che quando esegui l'ordinamento, se hai bisogno di scambiare due elementi lo fai fare a questa funzione. Per scambiare due elementi si una lista hai bisogno di avere oltre ai puntatori agli elementi da scambiare, anche i puntatori ai rispettivi elementi precedenti, ad esempio, se devi scambiare 'c' ed 'f', e la lsita è questa:

a-b-c-d-e-f-g-h

devi collegare l'elemento che precede 'c' (b) con 'f', e l'elemento che precede 'f' (e) con b, oltre a collegare poi 'f' con 'd' e 'c' con 'g'. Ma l'importante è avere i puntatori ai precedenti, peril l'elemento successivo lo puoi sapere con il campo link. Nota che se un elemento ha come precedente NULL significa che è i èprimo della lista, e quindi se lo scambi con un altro elemento sarà qesto ad esesere la testa della lista