diff options
Diffstat (limited to 'src/LinkedList.c')
| -rw-r--r-- | src/LinkedList.c | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/src/LinkedList.c b/src/LinkedList.c deleted file mode 100644 index aac05d6..0000000 --- a/src/LinkedList.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "LinkedList.h" -#include <stdlib.h> - -LinkedList *linkedlist_new(void) { - LinkedList *ll = malloc(sizeof(LinkedList)); - if (!ll) return NULL; - - ll->head = NULL; - ll->tail = NULL; - ll->size = 0; - - return ll; -} - -void linkedlist_delete(LinkedList *ll) { - LinkedListNode *node = ll->head; - LinkedListNode *next; - - while (node) { - next = node->next; - free(node); - node = next; - } - - free(ll); -} - -LinkedListNode *linkedlist_append(LinkedList *ll, void *elem) { - LinkedListNode *new_node = malloc(sizeof(LinkedListNode)); - if (!new_node) return NULL; - - new_node->data = elem; - new_node->next = NULL; - if (!ll->head) { - new_node->prev = NULL; - ll->head = new_node; - ll->tail = new_node; - } else { - ll->tail->next = new_node; - new_node->prev = ll->tail; - ll->tail = new_node; - } - - ll->size++; - return new_node; -} - -void *linkedlist_popfront(LinkedList *ll) { - if (!ll->head) return NULL; - - void *elem = ll->head->data; - LinkedListNode *node = ll->head; - ll->head = ll->head->next; - - ll->size--; - free(node); - return elem; -} - -LinkedListNode *linkedlist_find(LinkedList *ll, void *elem) { - if (!ll->head) return NULL; - - LinkedListNode *node = ll->head; - while (node) { - /* !NOTE should use a given comparator function - * instead of '==' operator */ - if (node->data == elem) return node; - node = node->next; - } - - return NULL; // Couldn't find the element -} - -void *linkedlist_remove(LinkedList *ll, LinkedListNode *node) { - void *elem = node->data; - - if (node->prev) node->prev->next = node->next; - else ll->head = node->next; - - if (node->next) node->next->prev = node->prev; - else ll->tail = node->prev; - - free(node); - ll->size--; - return elem; -} |