#include "llist.h" #include /* create new linked list * use llistFree after use * retturns NULL on failure */ llist *llistNew(void *data, int (*cmpFN)(void *a, void *b)) { llist *r = (llist *)malloc(sizeof(llist)); if (r != NULL) { r->cmpFn = cmpFN; r->data = data; r->prev = NULL; r->next = NULL; } return r; } /*return last node of linked list; */ llist *llistTail(llist *l) { llist *tail = l; while (tail->next != NULL) { tail = tail->next; } return tail; } /* creates new node from data and appends it to tail * */ llist *llistAppend(llist *head, void *data) { llist *new = llistNew(data, head->cmpFn); if (new != NULL) { llist *tail = llistTail(head); new->data = data; new->next = NULL; new->prev = tail; tail->next = new; } return new; } /* * return Node containing key or NULL */ llist *llistGet(llist *head, void *key) { llist *c = head; while (c != NULL) { if (head->cmpFn(c->data, key) == 0) { return c; } c = c->next; } return NULL; } bool llistContains(llist *head, void *key) { return llistGet(head, key) != NULL; } void llistFree(llist *head) { while (head != NULL) { llist *tmp = head->next; free(head); head = tmp; } }