altro errore:

codice:
		for(i=1; s[i] != '\0'; i++){
			a->next = malloc(sizeof(struct lista));
			a->carattere = s[i];
			a = a->next;
		}
così non va bene, prima di modificare il carattere devi avanzare nella lista, modificavi anche il carettere di head così

codice:
		for(i=1; s[i] != '\0'; i++){
			a->next = malloc(sizeof(struct lista));
                        a = a->next;
			a->carattere = s[i];
		}