Ho visto un pò i 2 frammenti di codice:
è sbagliato perxchè tu passi un puntatore alla testa e così salvi in p->succ l'indirizzo di t e non il valore puntato da t...p->succ=t;
t=p;
io tramite un typedef creerei un puntatore a scheda:struct scheda **t,
typedef struct scheda* punt;
e nella funzione lo passi così:
int inserisci (punt *t, int val, char *nome, char *cogn)![]()

Rispondi quotando