#include #include "lists.h" /* * ******************* * Advanced * ******************* * */ struct list *list_insert(struct list *list, void *value, size_t index) { if (list == NULL || index == 0) { struct list *new_elt = malloc(sizeof(struct list)); new_elt->data = value; new_elt->next = list; return new_elt; } struct list *elt = list; for (size_t i = 0; i < index - 1; i++) { if (elt->next == NULL) { break; } elt = elt->next; } struct list *new_elt = malloc(sizeof(struct list)); new_elt->data = value; new_elt->next = elt->next; elt->next = new_elt; return list; } struct list *list_remove(struct list *list, size_t index) { struct list *elt = list; struct list *prev_elt; if (index == 0) { struct list *res = elt->next; free(elt); return res; } for (size_t i = 0; i < index; i++) { if (elt == NULL) { return list; } prev_elt = elt; elt = elt->next; } if (elt == NULL) { return list; } prev_elt->next = elt->next; free(elt); return list; } int list_find(struct list *list, void *value) { if (list == NULL) { return -1; } int res = 0; while (list->data != value) { list = list->next; res++; if (list == NULL) { return -1; } } return res; } struct list *list_concat(struct list *list, struct list *list2) { if (list == NULL) { return list2; } struct list *elt = list; while (elt->next != NULL) { elt = elt->next; } elt->next = list2; return list; }