Ciao,
l'errore era nella stampalista. La condizione corretta è
while(aux != NULL) stampa
Altrimenti ti fermavi sempre al penultimo elemento.
Comunque, se ti va di darci un'occhiata, ho fatto qualche correzione al codice che ne migliora la leggibilità e forse anche un po' la logica...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef char tipoelem;
struct strutturalista
{
tipoelem info;
struct strutturalista *next;
};
typedef struct strutturalista tiponodo;
typedef tiponodo* tipolista;
tipolista insincoda (tipolista plis, tipoelem el)
{
tiponodo *pgen;
tipolista aux;
pgen = (tiponodo *) malloc(sizeof(tiponodo));
pgen->info = el;
pgen->next = NULL;
if(pgen==NULL)
{
printf("Errore in allocazione del RG\n");
return plis;
}
if(plis == NULL)
return pgen;
aux = plis;
while(aux->next != NULL)
aux = aux->next;
aux->next = pgen;
return plis;
}
tipolista costruiscilista()
{
tipolista list = NULL;
tiponodo *pgen;
tipoelem dato;
pgen = (tiponodo *) malloc(sizeof(tiponodo));
if(pgen==NULL)
{
printf("Errore in allocazione del RG\n");
return NULL;
}
printf("Scrivi i caratteri per comporre la lista:\n");
do
{
scanf(" %c",&dato);
if(dato != '0')
{
list = insincoda(list, dato);
}
} while(dato!='0');
return list;
}
void stampalista (tipolista list)
{
tiponodo *aux;
aux=list;
while(aux != NULL)
{
printf("%c\n",aux->info);
aux=aux->next;
}
}
int main()
{
tipolista lista;
tipoelem elem;
printf("Costruzione della lista\n");
printf("Inserisci 0 per terminare l'inserimento...\n\n");
lista = costruiscilista();
printf("\n");
stampalista(lista);
printf("Inserisci l'elemento che va in coda -> ");
scanf(" %c", &elem);
lista = insincoda(lista, elem);
stampalista(lista);
return 0;
}