When creating a self-referential data type, you need to use pointers to get around problems of circularity:
struct node;
struct node {
struct node * next;
int id;
}
...should work, but take care to allocate memory correctly when using it.
Why a pointer? Consider this: the point of a struct
definition is so that the compiler can figure out how much memory to allocate and what parts to access when you say node.id
. If your node
struct contains another node
struct, how much memory should the compiler allocate for a given node
?
By using a pointer you get around this, because the compiler knows how much space to allocate for a pointer.