aboutsummaryrefslogtreecommitdiff
path: root/linkedlist
diff options
context:
space:
mode:
authorBlake Romero <blake@blkrom.com>2024-09-18 00:32:53 +0100
committerBlake Romero <blake@blkrom.com>2024-10-30 10:13:26 +0000
commit45c1fbf4dfe5c7a7243b625eb8a600bdce6c748f (patch)
tree0c19f2d45941d2027ae5f07586af4bd427a5cdf6 /linkedlist
parentd1841d4d2a087d1681d1fb483301b4a7e4722f98 (diff)
Add makefile & tests
Diffstat (limited to 'linkedlist')
-rw-r--r--linkedlist/ll.c120
-rw-r--r--linkedlist/ll.h54
-rw-r--r--linkedlist/main.c44
3 files changed, 0 insertions, 218 deletions
diff --git a/linkedlist/ll.c b/linkedlist/ll.c
deleted file mode 100644
index 43bfa27..0000000
--- a/linkedlist/ll.c
+++ /dev/null
@@ -1,120 +0,0 @@
-// Implementation of a Linked List
-#include <stdio.h>
-#include <stdlib.h>
-#include "ll.h"
-
-Node* llnode() {
- Node* n = (Node*) malloc(sizeof(Node));
- n->value = 0;
- n->next = NULL;
- return n;
-}
-
-void llprint(Node* head) {
- Node* node = head;
- printf("[ ");
- do {
- printf("%i ", node->value);
- node = node->next;
- } while (node != NULL);
- printf("]\n");
-}
-
-void llvprint(Node* head) {
- Node* node = head;
- do {
- printf("[*] %i\n", node->value);
- node = node->next;
- printf(" |\n");
- } while (node != NULL);
- printf("[/] %p\n", node);
-}
-
-int llcount(Node* head) {
- Node* node = head;
- int count = 0;
- while (node != NULL) {
- count++;
- node = node->next;
- }
- return count;
-}
-
-void llappend(Node* head, int value) {
- Node* n = head;
- while (n->next != NULL) n = n->next;
- n->next = NEW_NODE;
- n->next->value = value;
- n->next->next = NULL;
-}
-
-void llpush(Node** head, int value) {
- Node* n = NEW_NODE;
- n->value = value;
- n->next = *head;
- *head = n;
-}
-
-void llinsert(Node** head, int value, int index) {
- Node* n = *head;
- Node* cur = NULL;
- Node* node = NEW_NODE;
- int i = 0;
- node->value = value;
- while (n->next != NULL && i < index) {
- cur = n;
- n = n->next;
- ++i;
- }
- cur->next = node;
- node->next = n;
-}
-
-void llfree(Node* head) {
- Node* n = NULL;
- while (head != NULL) {
- n = head;
- head = head->next;
- free(n);
- }
-}
-
-int llpop(Node** head) {
- Node* n = *head;
- int val = n->value;
- *head = n->next;
- free(n);
- return val;
-}
-
-int llrmlast(Node** head) {
- Node* n = *head;
- Node* cur = NEW_NODE;
- while (n->next != NULL) {
- cur = n;
- n = n->next;
- }
- int val = n->value;
- cur->next = NULL;
- free(n);
- return val;
-}
-
-int llrm(Node** head, int index) {
- Node* n = *head;
- Node* cur = NEW_NODE;
- Node* node = NEW_NODE;
- int i = 0;
- int val = 0;
- while (n->next != NULL && i < index) {
- cur = n;
- n = n->next;
- ++i;
- }
- cur->next = n->next;
- node->next = n;
- val = n->value;
- free(n);
- return val;
-}
-
diff --git a/linkedlist/ll.h b/linkedlist/ll.h
deleted file mode 100644
index 0e15c43..0000000
--- a/linkedlist/ll.h
+++ /dev/null
@@ -1,54 +0,0 @@
-#ifndef LL
-#define LL
-
-#define NEW_NODE llnode();
-
-#include <stdio.h>
-#include <stdlib.h>
-
-// Node
-typedef struct Node {
- int value;
- struct Node* next;
-} Node;
-
-// Create & initialise a new node
-Node* llnode();
-
-// Print linked list values
-// O()
-void llprint(Node* head);
-void llvprint(Node* head);
-
-// Return number of nodes in list
-// O(n)
-int llcount(Node* head);
-
-// Append value to the end of the list
-// O(n)
-void llappend(Node* head, int value);
-
-// Prepend a value to the list
-// O(1)
-void llpush(Node** head, int value);
-
-// Insert a value to the list at index
-// O(n)
-void llinsert(Node** head, int value, int index);
-
-// Free nodes from memory
-void llfree(Node* head);
-
-// Pop (remove) first node
-// O(1)
-int llpop(Node** head);
-
-// Remove last node
-// O(n)
-int llrmlast(Node** head);
-
-// Remove node at index
-// O(n)
-int llrm(Node** head, int index);
-
-#endif //LL
diff --git a/linkedlist/main.c b/linkedlist/main.c
deleted file mode 100644
index 3ba95a3..0000000
--- a/linkedlist/main.c
+++ /dev/null
@@ -1,44 +0,0 @@
-#include "ll.h"
-
-int main() {
- Node* head = NEW_NODE;
- int val;
-
- val = 7;
- head->value = val;
- printf("Init with %i:\t", val);
- llprint(head);
-
- val = 12;
- llpush(&head, val);
- printf("Push %i:\t", val);
- llprint(head);
-
- val = 99;
- printf("Append %i:\t", val);
- llappend(head,val);
- llprint(head);
-
- val = 45;
- printf("Insert %i:\t", val);
- llinsert(&head, val, 2);
- llprint(head);
-
- val = 42;
- printf("Insert %i:\t", val);
- llinsert(&head, val, 1);
- llprint(head);
-
- printf("Pop %i:\t\t", llpop(&head));
- llprint(head);
-
- printf("Remove %i:\t",llrmlast(&head));
- llprint(head);
-
- printf("Remove %i:\t",llrm(&head,1));
- llprint(head);
-
- llvprint(head);
-
- llfree(head);
-}