Ваш подход верен, но в вашем коде есть некоторые ненужные вещи.
struct Data {
int data = 1;
};
struct Node {
Data d;
Node *dir_next;
};
Это все, что вам нужно, и это стандартный способ создания связанных списков.
Комуполучить доступ к элементам списка, которые вы можете сделать:
Node current;
//build your list here
Node next = *(current.dir_next);
или использовать указатели
Node* current;
//build your list here
Node* next = current->dir_next;