ciao!!!
prima di tutto devi cambiare la struttura
codice:
typedef struct WElem
{
char* word;
struct WElem* next;
} WElem, *WList;
in
typedef struct WElem
{
char word[50];
struct WElem* next;
} WElem, *WList;
e di conseguenza il main in:
..
strcpy(X.word, "napoli");
X.next = &Y;
strcpy(Y.word, "livorno");
Y.next = &W;
strcpy(W.word, "hotel");
W.next = &V;
strcpy(V.word, "firenze");
V.next = &Z;
strcpy(Z.word, "dadada");
Z.next = NULL;
...
a meno che tu non voglia occuparti anche dell'allocazione dello spazio per contenere le parole...
per il problema dell'ordinamento ho provato a buttare giù qualcosa vedi un po' se fa al caso tuo...
codice:
WList wl_sort(WList L)
{
WList sorgente = L;
WList destinazione = NULL;
WList temp, temp1;
int trovato;
if(sorgente != NULL)
{
destinazione = (WList)malloc(sizeof(WElem));
strcpy(destinazione->word, sorgente->word);
destinazione->next = NULL;
sorgente = sorgente->next;
while(sorgente != NULL)
{
if(strcmp(sorgente->word, destinazione->word) < 0)
{
temp1 = (WList)malloc(sizeof(WElem));
strcpy(temp1->word, sorgente->word);
temp1->next = destinazione;
destinazione = temp1;
}
else
{
temp1 = destinazione;
trovato=0;
while(temp1->next != NULL && trovato != 1)
if(strcmp(temp1->next->word, sorgente->word) < 0)
temp1 = temp1->next;
else
trovato = 1;
temp = (WList)malloc(sizeof(WElem));
strcpy(temp->word, sorgente->word);
temp->next = temp1->next;
temp1->next = temp;
}
sorgente = sorgente->next;
}
}
return destinazione;
}
All'interno del codice ci sono delle imperfezioni infatti quando effettui una allocazione dovresti controllare che l'allocazione sia andata a buon fine, ti devi ricordare di deallocare tutto prima che il programma termini ecc ecc...