ciao, i nodi della lista dovrebbero essere collegati bene...facendo un inserimento in testa...mentre per quanto riguarda la funzione feof....onestamente non l'ho mai usata....però ti do una soluzione come facevo io di solito in questi casi anche se potrebbe sembrare meno efficiente in quanto dichiaro delle variabili in più di te e devo fare la copia delle variabili....
codice:
struct nodo *crealista(){
	struct nodo *nodo, *testa;
	testa = NULL;
	FILE *file = fopen("dist.txt", "r");	/*Apertura del file in modalità Lettura*/
	char nome[MAX];
	int mat, media;

	while(fscanf(file, "%d %s %d", &mat, nome, &media) != EOF){	/*Fino alla fine del file chiamato "file"*/
		nodo = malloc(sizeof(struct nodo));	/*Alloca memoria per il nodo*/
        nodo->mat = mat;
        strcpy(nodo->nome,nome);
        nodo->mediavoto = media;
		nodo-> succ = testa;	/*Il puntatore al nodo successivo punterà alla testa*/
		testa = nodo;	/*La testa sarà il nodo appena creato*/
	}
	fclose(file);	/*Chiusura del file*/
	return(testa);	/*Restituisce il puntatore alla testa della coda*/
}
intanto provo a dare un'occhiata alla funzione feof e vedo se capisco come funziona....
se ci sono problemi o dubbi fammi sapere