aboutsummaryrefslogtreecommitdiff
path: root/src/linked_list.h
diff options
context:
space:
mode:
authorMikkel Thestrup <mithe24@student.sdu.dk>2025-11-30 14:24:52 +0100
committerMikkel Thestrup <mithe24@student.sdu.dk>2025-11-30 14:24:52 +0100
commita23cb6d6f011950b11789898c10e63f4473a5200 (patch)
treee6f0c3c85e240848a03909639ac227db05f7da2a /src/linked_list.h
parent06be9b97b3cc575c69d037d6ba09950c0a53d7f3 (diff)
downloadcycle-detector-a23cb6d6f011950b11789898c10e63f4473a5200.tar.gz
cycle-detector-a23cb6d6f011950b11789898c10e63f4473a5200.zip
Updated every file and function to follow style guide
Diffstat (limited to 'src/linked_list.h')
-rw-r--r--src/linked_list.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/src/linked_list.h b/src/linked_list.h
new file mode 100644
index 0000000..4e6dadf
--- /dev/null
+++ b/src/linked_list.h
@@ -0,0 +1,50 @@
+#ifndef LINKED_LIST_H
+#define LINKED_LIST_H
+
+// A linked list containing any type of pointer.
+// The linked list does _not_ own its elements.
+
+typedef struct LinkedList LinkedList;
+typedef struct LinkedListNode LinkedListNode;
+
+struct LinkedList {
+ LinkedListNode *head;
+ LinkedListNode *tail;
+ int size;
+};
+
+struct LinkedListNode {
+ LinkedListNode *next;
+ LinkedListNode *prev;
+ void *data;
+};
+
+// Allocate and initialize an empty linked list.
+// Returns: a pointer to the new linked list, or NULL on error.
+// Post: the caller owns the linked list.
+LinkedList *linked_list_new();
+
+// Deallocate the given linked list, including all nodes
+// (but _not_ the data they point to, the user owns that).
+void linked_list_delete(LinkedList *ll);
+
+// Append a the given element to the list.
+// The linked list does _not_ take ownership over the element
+// (only the linked list node).
+// Returns: a pointer to the node with the new element, or NULL on error.
+LinkedListNode *linked_list_append(LinkedList *ll, void *elem);
+
+// Remove and return the first element from the given list.
+// Pre: ll->size != 0
+void *linked_list_popfront(LinkedList *ll);
+
+// Find the linked list node containing the given element.
+// Returns: a pointer to the found node, or NULL if the element was not found.
+LinkedListNode *linked_list_find(LinkedList *ll, void *elem);
+
+// Remove the given node from the given linked list (and deallocate it).
+// Pre: node must belong to ll
+// Returns: node->data
+void *linked_list_remove(LinkedList *ll, LinkedListNode *node);
+
+#endif // LINKED_LIST_H