/* see pg 152 */ typedef struct list_node { void *data; /* L->data */ struct list_node *next; /* L->next */ } list_node; list_node *L = 0; /* ? */ while (more_widgits()){ insert(next_widget(), L) } L = reverse(L); list_node *reverse(list_node *L){ list_node *rtn = 0; while (L){ rtn = insert(L->data, rtn); L = L->next; } return rtn; } list_node *insert(void *d, list_node *L){ list_node *t = (list_node *) malloc(sizeof(list_node)); t->data = d; t->next = L; return t; } void delete_list(list_node *L){ while (L){ list_node *t = L; L = L->next; free(t->data); free(t); } }