#ifndef _sllist_ #define _sllist_ typedef struct sllist_node { struct sllist_node *next; void *val; } Sllist_Node; typedef struct sllist { Sllist_Node *head; Sllist_Node *tail; } Sllist; extern Sllist *new_sllist(); extern void free_sllist(Sllist *); extern Sllist_Node *sll_prepend(Sllist *, void *); extern Sllist_Node *sll_append(Sllist *, void *); extern Sllist_Node *sll_insert_after(Sllist *, Sllist_Node *, void *); extern Sllist_Node *sll_first(Sllist *); extern Sllist_Node *sll_last(Sllist *); extern Sllist_Node *sll_next(Sllist_Node *); extern void *sll_val(Sllist_Node *); extern int sll_empty(Sllist *); #endif