#include "list.h" ListNode* list_init_head(void* data) { ListNode* new = malloc(sizeof(ListNode)); if(new == NULL) return NULL; new->data = data; new->next = NULL; return new; } ListNode* list_add(ListNode* head, void* data) { ListNode* new = malloc(sizeof(ListNode)); if(new == NULL) return NULL; new->data = data; new->next = NULL; if(head == NULL) head = new; else { ListNode* it; for(it = head; it->next != NULL; it = it->next) ; it->next = new; } return head; } ListNode* list_find(ListNode* head, const void* data) { ListNode* it; for(it = head; it != NULL; it = it->next) if(it->data == data) break; return it; } ListNode* list_element_at(ListNode* head, uint16_t index) { ListNode* it; uint16_t i; for(it = head, i = 0; it != NULL && i < index; it = it->next, i++) ; return it; } ListNode* list_remove(ListNode* head, ListNode* ep) { if(head == NULL) { return NULL; } if(head == ep) { ListNode* new_head = head->next; free(head); return new_head; } ListNode* it; for(it = head; it->next != ep; it = it->next) ; it->next = ep->next; free(ep); return head; } void list_free(ListNode* head) { ListNode* it = head; ListNode* tmp; while(it != NULL) { tmp = it; it = it->next; free(tmp); } }