The follwing declaration is valid.
struct node { int a; struct node *next; };
However, when we define the following, it gives error.
Pointer store address, struct has structure. If declared like struct it would be recursive and infinite. If declared like pointer it refers to other structure somewhere else.