Visto che ieri siete stati così gentile, ne approfitto

Devo leggere da un file un'elenco di parole e creare una lista di struct conteneti la parola e il numero di volte che questa compare nell'elenco. Poi devo stampare il tutto.

Ho fatto il programmino però l'ultima parola viene letta due volte e non ne capisco il motivo. Ho allegato il file parole.c al messaggio. Il file da leggere è del tipo:

gatto
cane
pesce
cinghiale
pesce
fringuello
cane
cinghiale
toro
topo

Forse non si può allegare il file .c quindi lo metto qua

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

typedef struct _WORD{
	char *parola;
	int num;
	struct _WORD *next;
} WORD;

WORD *head=NULL;

void AddUpdate(char *parola);
void Add(char *parola);
void PrintList();
void Update(WORD *W);

int main(int argc, char *argv[]){
	
	FILE *fpin;
	char tmp[80+1];
	int len;

	if((fpin=fopen(argv[1], "r")) == NULL ){
		printf("Errore apertura file %s", argv[1]);	
	}
	
	while(!feof(fpin)){
		fgets(tmp, 80, fpin);
		AddUpdate(tmp);
	}
	
	PrintList();
}

void AddUpdate(char *parola){
	WORD *W;
	int i, flag=0;
	for(W=head; W!=NULL; W=W->next){
		if(strcmp(W->parola, parola)==0){
			Update(W);
			flag=1;
		}		
	}
	if(flag==0){
		Add(parola);
	}
}

void Add(char *parola){
	WORD *W;
	W=malloc(sizeof(WORD));
	W->num=1;
	W->parola=strdup(parola);

	/*Inserimento in testa*/
	W->next=head;
	head=W;
}

void Update(WORD *W){

	W->num++;
}

void PrintList() {

	WORD *W=head;
	while(W!=NULL){
		printf("%s", W->parola);
		printf("%d\n", W->num);
		W=W->next;
	}
}