Prima fase:
Se p è NULL (la lista è vuota) crei il primo elemento e gli assegni la prima riga del file
Invece se p non è NULL (la lista non è vuota) scorri tutta la lista fino alla fine.
Seconda fase:
crei ogni nuovo nodo in coda punt->succ = (struct elemento *)malloc(sizeof(struct elemento)); e gli assegni le stringhe della riga corrente. continui fino alla fine del file, in fondo non cambia poi molto rispetto codice che hai già creato.
Per semplicità ti consiglierei di usare una funzione che crea un nuovo nodo elemento, legge le stringhe dal file aperto e glieli assegna, per poi restituire il puntatore.
esempio
codice:struct elemento *readLine( FILE *stream ) {