No entiendo muy bien que no puedas usar struct para crear la definición de un nodo de una lista.
Una lista enlazada es como una cadena compuesta de eslabones, uno seguido del otro, que son los llamados nodos. Cada nodo guarda en su interior un objeto del tipo que se necesite y además un puntero que apunte al siguiente nodo (o bien que sea NULL si es el último nodo de la lista).
Por ejemplo, para crear una lista de enteros int, el nodo sería así:
struct nodo{
int valor;
nodo* siguiente;
}
Lo siguiente sería desarrollar el código para ir construyendo la lista a medida que se van introduciendo valores en ella, enlazando unos nodos con otros. Otras acciones útiles son recorrer la lista buscando un valor, borrar un nodo determinado procurando que el nodo anterior y posterior queden unidos... etc...