updated list lib

This commit is contained in:
2025-07-08 20:05:01 -06:00
parent d1f38e397e
commit c002c78b9a
7 changed files with 579 additions and 97 deletions
+81
View File
@@ -0,0 +1,81 @@
#include <list.h>
#include <stdlib.h>
int ListRemove(LIST *list) {
NODE *unused;
if (list->current == NULL) {
return -1;
}
if (list->size == 1) {
unused = list->current;
list->current = NULL;
list->head = NULL;
list->tail = NULL;
}
else if (list->current == list->head) {
unused = list->head;
list->head = list->head->next;
list->current = list->head;
list->current->previous = NULL;
}
else if (list->current == list->tail) {
unused = list->tail;
list->tail= list->tail->previous;
list->current = list->tail;
list->current->next = NULL;
}
else {
unused = list->current;
list->current->previous->next = list->current->next;
list->current->next->previous = list->current->previous;
list->current = list->current->next;
}
unused->data = NULL;
free(unused->data);
unused->next = NULL;
unused->previous = NULL;
unused = NULL;
free(unused);
list->size--;
return 0;
}
void ListFree(LIST *list) {
ListFirst(list);
while (list->head != NULL) {
ListRemove(list);
}
free(list);
}
void *ListTrim(LIST *list) {
NODE *tempnode = list->tail->previous;
list->tail->previous = NULL;
free(list->tail);
list->tail = tempnode;
list->size--;
return 0;
}
void *ListSearch(LIST *list, int (*comparator)(void *, void*),
void *comparisonArg) {
ListFirst(list);
while (list->current != NULL) {
if ((*comparator)(list->current->data, comparisonArg)) {
break;
}
else {
ListNext(list);
}
}
if (list->current == NULL) {
list->current = list->tail;
return NULL;
}
return list->current;
}