#include #include #include "linkedlist.h" int main() { LIST *list = ListNew(); char *str1 = "Hello World"; char *str2 = "Welcome to Atlantis"; char *str3 = "Lorem Ipsum"; AddFirst(list, str1); AddLast(list, str2); AddFirst(list, str3); while(list->size > 0) { printf("%s\n", RemoveFirst(list)); } return EXIT_SUCCESS; } NODE *NodeNew(void *data) { NODE *node; if(!( node = malloc(sizeof(NODE)))) return NULL; node->next = NULL; node->prev = NULL; node->data = data; return node; } LIST *ListNew(void) { LIST *list; if(!(list = malloc(sizeof(LIST)))) return NULL; list->head = NULL; list->tail = NULL; list->size = 0; return list; } void AddFirst(LIST *list, void *data) { NODE *node = NodeNew(data); if(list->head == NULL) { list->head = node; list->tail = node; list->size++; } else { list->head->prev = node; node->next = list->head; list->head = node; list->size++; } } void AddLast(LIST *list, void *data) { NODE *node = NodeNew(data); if(list->tail == NULL) { list->head = node; list->tail = node; list->size++; } else { list->tail->next = node; node->prev = list->tail; list->tail = node; list->size++; } } void *RemoveFirst(LIST *list) { if(list->head == NULL) return NULL; NODE *node = list->head; if(node->next == NULL) { list->head = NULL; list->tail = NULL; list->size--; void *retval = node->data; free(node); return retval; } list->head = node->next; list->head->prev = NULL; list->size--; void *retval = node->data; free(node); return retval; }