From 24fbfb8c41c62b11506668a22074379115f57600 Mon Sep 17 00:00:00 2001 From: sanine Date: Fri, 24 Oct 2025 13:32:54 -0500 Subject: implement basic linked list append --- lichen.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'lichen.c') diff --git a/lichen.c b/lichen.c index e8c8e19..f028d92 100644 --- a/lichen.c +++ b/lichen.c @@ -49,6 +49,53 @@ li_llnode_t * li_copy_llnode(li_llnode_t *n) { void li_free_llnode(li_llnode_t *n, void (*free_data)(void*)) { if (n != NULL) { free_data(n->data); + li_free_llnode(n->next, free_data); } free(n); } + + +struct li_ll_t * li_alloc_ll() { + struct li_ll_t *list = malloc(sizeof(struct li_ll_t)); + if (list == NULL) { + fprintf(stderr, "failed to allocate linked list\n"); + return NULL; + } + + list->tag = 0; + list->count = 0; + list->head = NULL; + list->end = NULL; + return list; +} + +void li_free_ll(struct li_ll_t *list, void (*free_data)(void*)) { + if (list != NULL) { + li_free_llnode(list->head, free_data); + } + free(list); +} + + +void li_ll_append(struct li_ll_t *list, void *data) { + li_llnode_t *n = li_alloc_llnode(); + n->data = data; + if (n == NULL) { + return; + } + if (list->end != NULL) { + list->end->next = n; + list->end = n; + } else { + list->head = n; + list->end = n; + } + list->count += 1; +} + +struct li_ll_t * li_copy_list(struct li_ll_t *list) { + list = list; + return NULL; +} + + -- cgit v1.2.1