Ciao, secondo me ci sono alcuni errori logici, te li commento nel codice
codice:
pt_n newNode (int r, pt_n next){
pt_n x=malloc(sizeof(x));// x è un puntatore a struct, secondo me dovrebbe essere
// pt_n x=malloc(sizeof(n)); dimensione della struct n
if(x==NULL)
return NULL;
else{
x->val = r;
printf("- valore nel nodo %d\n", r);
x->next=next;
}
return x;
};
/************************************************/
pt_n insert (pt_n testa,int val){
pt_n tmp;
if(testa==NULL){
return newNode(val, NULL);
}else{
for(tmp=testa; tmp->next!=NULL; tmp=tmp->next){ // qui il primo nodo gli metti newNode e si ferma
//troncando la lista visto che next è NULL, perdi i
// riferimenti agli altri nodi
tmp->next= newNode(val, NULL);
}}
/* dovresti scorrere la lista fino all'ultimo nodo e poi inserire in nuovo nodo
for (tmp=testa; tmp->next!=NULL; tmp=tmp->next); scorre tutta la lista notare il punto e virgola
tmp->next= newNode(val, NULL); aggiune il nuovo nodo */
return testa;
};
P.S. con inserimento in coda non avresti bisogno di restituire il puntatore alla testa, visto che non viene modificato.