Ho un problema con la lista linkata ordinata alfabeticamente. Quando una parola deve essere inserita in testa, la inserisce senza problemi, ma quando deve essere inserita in mezzo o in coda, non la inserisce in un nuovo nodo, ma in uno preesistente cancellando così la parola che c'era prima. Ad esempio se inserisco cane e poi abaco mi visualizza giustamente:

abaco
cane

Quando poi inserisco zembra la lista risulta essere:

abaco
zebra

Qualcuno sa aiutarmi?

codice:
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
#define MAX_DIM 20

struct Elenco;
typedef Elenco * puntElenco;
typedef struct Elenco{
        char info[MAX_DIM];
        puntElenco next;
        } Elenco;


puntElenco inserisci(puntElenco L, char*word){
           puntElenco q;
           q=(puntElenco)malloc(sizeof(Elenco));
           strcpy(q->info,word);
           q->next=L;
           return(q);
           }
           
puntElenco InserisciElementoInLista(puntElenco L,char*parola){
           puntElenco q=L, prec;
           int PosTrovata=0;
           if(q==NULL){
                       q=inserisci(L,parola);
                       return(q);
                       }
           if(strcmp(q->info,parola)==1){
                                       q=inserisci(L,parola);
                                       return q;
                                       }
           
           prec=q;
           while((q->next!=NULL) && (PosTrovata==0)){
                                 if(strcmp(q->info,parola)==-1){
                                                                prec=q;
                                                                q=q->next;
                                                                }
                                 else PosTrovata=1;
                                 }
           prec->next=inserisci(q->next,parola);
           return (L);
           }
                                               

void VisualizzaLista(puntElenco L){
     puntElenco q=L;
     printf("\nLista parole:\n\n");
     while(q!=NULL){
                    printf("%s\n",q->info);
                    q=q->next;
                    }
     printf("\n");
                    }

main (){
     puntElenco el_parole;
     el_parole = NULL;
     int scelta,a=1,vocali=0,i;
     char word[MAX_DIM]={'\0'},lunga[MAX_DIM]={'\0'};
     do{
          system("cls");
          printf("SCELTA OPERAZIONE \n");
          printf("\nPREMI 1:-----------INSERISCI PAROLA---------------------\n");
          printf("PREMI 2:-----------VISUALIZZA LISTA-----------------\n");
          printf("PREMI 3:----------------USCITA-----------------\n");
          printf("\nScelta: ");
          scanf("%d",&scelta);
         
          if(scelta==1){
                        printf("Digita la parola da inserire: ");
                        scanf("%s",word);    
                        el_parole=InserisciElementoInLista(el_parole,word);
                        }
                        
          if(scelta==2) VisualizzaLista(el_parole);
           
                     
                       
          if(scelta==3) a=0;
          
          if(scelta!= 1 && scelta!= 2 && scelta!= 3) printf("\nScelta non valida\n\n"); 
          
          system("PAUSE");                       
          } while(a!=0);
      return 0;
      }