ciao, dovrei inserire un testo da tastiera e inserirlo in una lista di stringhe ordinata in ordine alfabetico. Ho scritto questo codice ma non ottengo l'ordinamento. Dove sbaglio? grazie.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct lista{
char stringa[100];
struct lista *pun;
};

struct lista*inserimento(struct lista *, char *);
void visualizza(struct lista *);

main()
{
struct lista *puntLista = NULL;

char parola[100];

printf("INSERIRE TESTO:\n");
scanf("%[^\t]", parola);

puntLista = inserimento(puntLista, parola);
visualizza(puntLista);

system("PAUSE");
return 0;
}

struct lista *inserimento(struct lista *p, char *value)
{
struct lista *p0, *p1, *p2;
p0 = (struct lista *)malloc(sizeof(struct lista));

strcpy(p0->stringa, value);
if(p == NULL)
return(p0);

p1 = p;
p2 = p;

while(p1 != NULL && (strcmp(p1->stringa, p0->stringa) != 0)){
if(strcmp(p1->stringa, value) > 0){
if(p1 == p){
p0->pun = p1;
p = p0;
return(p);
}
else{
while(p2->pun != p1){
p2 = p2->pun;
p0->pun = p1;
p2->pun = p0;
return(p);
}
}
p1 = p1->pun;
}
if(p1 == NULL){
while(p2->pun != NULL){
p2 = p2->pun;
p2->pun = p0;
}
}
return(p);
}
}

void visualizza(struct lista *p)
{
if(p == NULL)
printf("La lista e' vuota\n");
else {
printf("La lista e':\n");

while(p != NULL){
printf("%s ", p->stringa);
p = p->pun;
}
printf("\n\n");
}
}