Вы можете сделать typedef точно так же, как для любой другой структуры:
typedef struct X {
int x;
struct X * next;
} X;
Или вы можете сделать typedef перед структурой:
typedef struct X X;
struct X {
int x;
X * next;
};
В первом случае выше мыдолжны ссылаться на struct внутри себя, так как typedef еще не определен.Во втором случае мы явно определяем typedef перед структурой и поэтому можем использовать его внутри.
Обратите внимание, что использование одного и того же имени как для структуры, так и для typedef иногда может быть несколько запутанным, но естьв этом нет ничего плохого.