Aggiundendomi a quello che ti ho detto ecco quello che farei (ho usato un'array invece che
una lista linkata perchè in questo caso credo sia meglio, quindi non uso next in alcun modo):
codice:
int leggi_vertici(struct nodo *testa, int primovalore, int n_record)
{
nodoCollegato *tmp_clg = NULL;
int num_totali = 0, var = 0, valorecorrente, i = 0;
valorecorrente = primovalore;
while (!feof(fdata) && primovalore == valorecorrente )
{
fscanf(fdata,"%d", &num_totali);
testa->numVerticiCollegati = num_totali;
if( !testa->elencoVerticiCollegati )
{
tmp_clg = new nodoCollegato[num_totali];
testa->elencoVerticiCollegati = tmp_clg;
}
else
tmp_clg = testa->elencoVerticiCollegati;
for( i = 0; i < num_totali; i++ )
{
fscanf(fdata,"%d",&var);
if( n_record == 2 )
tmp_clg[i]->vertice = var;
else
tmp_clg[i]->peso = var;
}
fscanf(fdata,"%d",&valorecorrente);
testa++;
}
return valorecorrente;
}
Non so se va...io sinceramente avrei usato delle classi e lo avrei scritto diversamente....ma magari questo ti da una idea...

Dimenticavo...ovviamente la memoria allocata la devi liberare con una bella delete [] quando hai finito (ed una bella classe con distruttore ti semplicava la vita)