]> git.xolatile.top Git - soikk-llist.h.git/commitdiff
Initial commit
authorSoikk <soikk@1005PE.my.domain>
Fri, 28 Jan 2022 21:07:27 +0000 (22:07 +0100)
committerSoikk <soikk@1005PE.my.domain>
Fri, 28 Jan 2022 21:07:27 +0000 (22:07 +0100)
llist.h [new file with mode: 0644]

diff --git a/llist.h b/llist.h
new file mode 100644 (file)
index 0000000..340ab0f
--- /dev/null
+++ b/llist.h
@@ -0,0 +1,70 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+
+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);
+}