Non ti servono 2 strutture distinte (di solito). Basta la stessa struttura ripetuta N volte, e con un puntatore alla struttura all'interno:
struct vagone
{
int *a;
struct vagone *next;
};
Il collegamento lo fai così:
struct vagone *testa = malloc(sizeof(struct vagone)); // primo vagone
testa->next = malloc(sizeof(struct vagone)); // secondo vagone
testa->next->next = NULL;
Se vuoi fare un treno di N vagoni devi predisporre un ciclo:
struct vagone *testa = malloc(sizeof(struct vagone)); // vagone di testa
struct vagone *tmp = testa; // creo un puntatore temporaneo e lo faccio puntare al vagone di testa
for (int i = 1; i < N; i++){
tmp->next = malloc(sizeof(struct vagone)); // creo un vagone e lo collego al precedente
tmp = tmp->next; // sposto il puntatore temporaneo sul nuovo vagone
}
tmp->next = NULL; // non ci sono ulteriori vagoni agganciati
S.E.&.O.