2022-10-12 02:01:37 +00:00
|
|
|
#include "list.h"
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *list_init_head(void* data) {
|
|
|
|
ListNode *new = (ListNode *) malloc(sizeof(ListNode));
|
2022-10-12 02:01:37 +00:00
|
|
|
new->data = data;
|
|
|
|
new->next = NULL;
|
|
|
|
return new;
|
|
|
|
}
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *list_add(ListNode *head, void* data) {
|
|
|
|
ListNode *new = (ListNode *) malloc(sizeof(ListNode));
|
2022-10-12 02:01:37 +00:00
|
|
|
new->data = data;
|
|
|
|
new->next = NULL;
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
if (head == NULL)
|
2022-10-12 02:01:37 +00:00
|
|
|
head = new;
|
|
|
|
else {
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *it;
|
2022-10-12 02:01:37 +00:00
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
for (it = head; it->next != NULL; it = it->next)
|
2022-10-12 02:01:37 +00:00
|
|
|
;
|
|
|
|
|
|
|
|
it->next = new;
|
|
|
|
}
|
|
|
|
|
|
|
|
return head;
|
|
|
|
}
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *list_find(ListNode *head, void* data) {
|
|
|
|
ListNode *it;
|
2022-10-12 02:01:37 +00:00
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
for (it = head; it != NULL; it = it->next)
|
|
|
|
if (it->data == data)
|
|
|
|
break;
|
2022-10-12 02:01:37 +00:00
|
|
|
|
|
|
|
return it;
|
|
|
|
}
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *list_element_at(ListNode *head, uint16_t index) {
|
|
|
|
ListNode *it;
|
2022-10-12 02:01:37 +00:00
|
|
|
uint16_t i;
|
2022-10-13 13:57:08 +00:00
|
|
|
for (it = head, i = 0; it != NULL && i < index; it = it->next, i++);
|
2022-10-12 02:01:37 +00:00
|
|
|
return it;
|
|
|
|
}
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *list_remove(ListNode *head, ListNode *ep) {
|
|
|
|
if (head == ep) {
|
|
|
|
ListNode *new_head = head->next;
|
2022-10-12 02:01:37 +00:00
|
|
|
free(head);
|
|
|
|
return new_head;
|
|
|
|
}
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
ListNode *it;
|
2022-10-12 02:01:37 +00:00
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
for (it = head; it->next != ep; it = it->next)
|
2022-10-12 02:01:37 +00:00
|
|
|
;
|
|
|
|
|
|
|
|
it->next = ep->next;
|
|
|
|
free(ep);
|
|
|
|
|
|
|
|
return head;
|
|
|
|
}
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
void list_free(ListNode *head) {
|
2022-10-12 02:01:37 +00:00
|
|
|
ListNode *it = head, *tmp;
|
|
|
|
|
2022-10-13 13:57:08 +00:00
|
|
|
while (it != NULL) {
|
2022-10-12 02:01:37 +00:00
|
|
|
tmp = it;
|
|
|
|
it = it->next;
|
|
|
|
free(tmp);
|
|
|
|
}
|
|
|
|
}
|