codice:
typedef enum record_id {
  REGISTRAZIONE,
  ALBERGO,
  ACCOMPAGNATORE
} record_id_t;

typedef char string_t[N];

#define BASIC_MEMBERS  \
  record_id_t id;                 \
  string_t nome, cognome; \
  int flag

typedef struct record 
{
  BASIC_MEMBERS;
} record_t;

typedef struct registrazione
{
    BASIC_MEMBERS;
    string_t reg;
} registrazione_t;

typedef enum qualifica_albergo 
{
    3STELLE,
    4STELLE
} qualifica_albergo_t;

typedef struct albergo 
{
    BASIC_MEMBERS;
    qualifica_albergo_t q;
} albergo_t;

...

typedef struct list {
  struct list *precedente, *successivo;
  record_t *record;
} list_t;
Ogni nodo ha un puntatore a `record_t', che contiene solo `nome', `cognome' e flag. Puoi usare `puntatore->id per sapere di che tipo si tratta e fare un cast per accedere agli ulteriori dati;