codice:
lista=inserisciNodoInCoda(lista);
Nodo* inserisciNodoInCoda(Nodo* first){
Nodo* tmp;
tmp=(Nodo*)malloc(sizeof(Nodo));
if(tmp==NULL){
exit(-1);
}
tmp->info=3;
tmp->next=NULL;
while(first->next!=NULL){
first=first->next;
}
first->next=tmp;
return first;
}
il problema è che tu passi lista (first) e nella funzione lo riassegni (while) facendolo puntare all' (pen)ultimo elemento e lo restituisci, sovrascrivendo lista (il tuo nodo radice)
Puoi ovviare facendo una copia di first e fare il ciclo su di essa non modificando first.
Tieni presente che nella tua funzione non tieni conto di fare un inserimento in coda nel caso lista sia null (vuota)