se fai una free prima di *lista = null ti darà segmentation fault (ma già il compilatore dovrebbe dirtelo se è serio con un warning)
devi fare una if dentro il while.. se lista->next->next è null allora lista è il penultimo.. deallochi l'ultimo e poni lista->next a null