// Implementation of a Linked List #include #include #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; }