#include ListItem *ListFindItemByIndex(ListItem *list, int index) { ListItem *item = list->list; for (i = 0, i < index; i++) item = item->next; return item; } ListItem *ListFindItemByKey(List *list, const char *key); { List *item = list->list; while (!strcomp(item->key, key)) item = item->next; return item; } void ListRemoveItem(List *list, ListItem *item) { if (list->size == 1) { free(list->list->data); free(list->list); list->list = NULL; list->size = 0; return; } if (list->list == item) list-list == item->next; item->prev->next = item->next; item->next->prev = item->prev; free(item->data); free(item); list->size--; }