codice:
#include <stdio.h>
#include <stdlib.h>
struct listelem { char dato; 
                  struct listelem *prossimo;
};
typedef struct listelem elemlist;
typedef elemlist *listadielem;
typedef listadielem *puntapunt;
void inizializza (puntapunt); 
void insert(puntapunt,char);
void stampa(listadielem); 
main(){
	elemlist *lista; 
	char car='?';
	inizializza(&lista); 
	while (car !='.'){
		printf("\n inserisci un carattere, punto per terminare\n"); 
		scanf("%c",&car);
		insert(&lista,car);
	} 
	stampa(lista);
	return 0;
}

void inizializza(puntapunt list){
	*list=NULL;
}
void insert (puntapunt punt, char valore){
	elemlist *newpunt;
	newpunt=(listadielem)malloc(sizeof(elemlist));
	newpunt->dato=valore;
	newpunt->prossimo=*punt;
	*punt=newpunt;
}
void stampa(listadielem primo){
	elemlist *attuale; attuale= primo;
	if (attuale==NULL) printf("Lista vuota\n\n");
	else  { printf("La lista e' \n\n");
	while (attuale !=NULL){
		 printf("%c-->",attuale->dato);
		 attuale=attuale->prossimo;
	}
	}
}
1)scrive due volte inserisci un carattere...perchè?
2)non ci ho capito niente Potete gentilissimissimamente spiegarmi come funziona?