#include #include "sllist.h" Sllist new_sllist() { Sllist l; l = (Sllist) malloc(sizeof(struct sllist)); l->link = l; return l; } free_sllist(Sllist l) { Sllist tmp; while (!sll_empty(l)) { tmp = sll_first(l); l->link = tmp->link; free(tmp); } free(l); } Sllist sll_prepend(Sllist l, Jval val) { Sllist tmp; return sll_insert_after(l, val); } Sllist sll_insert_after(Sllist l, Jval val) { Sllist tmp; tmp = (Sllist) malloc(sizeof(struct sllist)); tmp->val = val; tmp->link = l->link; l->link = tmp; return tmp; } Sllist sll_first(Sllist l) { return l->link; } Sllist sll_next(Sllist l) { return l->link; } Sllist sll_nil(Sllist l) { return l; } int sll_empty(Sllist l) { return (l->link == l); }