From 5d47f26c576430f29cd73b9e91863e8f259da3ab Mon Sep 17 00:00:00 2001 From: Soikk Date: Fri, 28 Jan 2022 22:07:27 +0100 Subject: [PATCH] Initial commit --- llist.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 llist.h diff --git a/llist.h b/llist.h new file mode 100644 index 0000000..340ab0f --- /dev/null +++ b/llist.h @@ -0,0 +1,70 @@ +#include +#include +#include + + +typedef struct node{ + void *data; + struct node *next; +} node; + +typedef struct llist{ + char *name; + node *head; +} llist; + +node *Node(void *data, size_t size){ + node *nnode = malloc(sizeof(node)); + nnode->data = malloc(size); + memmove(nnode->data, data, size); + nnode->next = NULL; + return nnode; +} + +llist Llist(char *name, node *head){ + llist nllist = {.name = name, .head = head}; + return nllist; +} + +void append(llist l, node *n){ + if(l.head != NULL){ + node *temp = l.head; + while(temp->next != NULL) + temp = temp-> next; + temp->next = n; + }else{ + l.head = n; + } +} + +void insert(llist *l, node *n){ + if(l->head != NULL){ + node *temp = l->head; + n->next = temp; + } + l->head = n; +} + +void insertPos(llist *l, node *n, size_t pos){ + int i = 0; + if(l->head != NULL){ + if(pos == 0){ + insert(l, n); + return; + } + node *t = NULL; + node *tnext = l->head; + for(i = 0; i < pos && tnext != NULL; ++i){ + t = tnext; + tnext = t->next; + } + if(tnext == NULL && i != pos){ + goto poserr; + } + t->next = n; + n->next = tnext; + } +poserr: + fprintf(stderr, "Couldn't insert at desired position. " + "Inserting at position %d", i); +} -- 2.39.5