summaryrefslogtreecommitdiff
path: root/lichen.c
diff options
context:
space:
mode:
authorsanine <sanine.not@pm.me>2025-10-24 13:32:54 -0500
committersanine <sanine.not@pm.me>2025-10-24 13:32:54 -0500
commit24fbfb8c41c62b11506668a22074379115f57600 (patch)
tree1994109fe42df1e0589a9e96051a235b611ba487 /lichen.c
parent30efa292790dfdc9eedefa97a9f82e1cac2aeaa0 (diff)
implement basic linked list append
Diffstat (limited to 'lichen.c')
-rw-r--r--lichen.c47
1 files changed, 47 insertions, 0 deletions
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;
+}
+
+