The purpose of the first “node” in the declaration: “typedef struct node { – – – } Node;”

c

I am studying code examples from my professor in order to become better acquainted with linked data structures.

In our linked-list.c example the professor defines a type Node as follows:

typedef struct node {
  int data;
  struct node *next;
} Node;

What's the point of the lower case node? I was under the impression that you could just write, for example:

typedef struct {
  int data;
  struct node *next;
} Node;

and then use Node as its own type. Does it have something to do with the fact that if you don't include a lower case node then when the compiler is evaluating the code it will not be able to understand what is meant by "struct node *next"?

Best Answer

Take a look at this declaration:

struct node {
  int data;
  struct node *next;
};

typedef struct node Node;

This can be combined into a single statement (simplifying a declaration):

typedef struct node {
  int data;
  struct node *next;
} Node;