Code:
typedef struct tagname {
   /* members here */
} varlist;
is just a shortcut for
Code:
struct tagname {
   /* members here */
};

typedef struct tagname varlist;
It's a common enough idiom, although the structure tag (tagname) is often left out. If you can refer to it as varlist, why use struct tagname?