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)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; }
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)