created why2_list_remove_at in llist
removes element by index
This commit is contained in:
parent
38f814ac9c
commit
90643d8247
@ -42,6 +42,7 @@ typedef struct
|
||||
void why2_list_push(why2_list_t *list, void *value, unsigned long size); //PUSH ELEMENT TO LIST BACK
|
||||
void why2_list_push_at(why2_list_t *list, unsigned long index, void *value, unsigned long size); //PUSH ELEMENT TO INDEX index of LIST
|
||||
void why2_list_remove(why2_list_t *list, why2_node_t *node); //REMOVE ELEMENT
|
||||
void why2_list_remove_at(why2_list_t *list, unsigned long index); //REMOVE ELEMENT WITH INDEX index
|
||||
void why2_list_remove_back(why2_list_t *list); //REMOVE LAST ELEMENT
|
||||
why2_node_t *why2_list_find(why2_list_t *list, void *value); //FIND ELEMENT IN LIST
|
||||
unsigned long why2_list_get_size(why2_list_t *list); //GET SIZE
|
||||
|
@ -117,6 +117,29 @@ void why2_list_remove(why2_list_t *list, why2_node_t *node)
|
||||
why2_deallocate(node);
|
||||
}
|
||||
|
||||
void why2_list_remove_at(why2_list_t *list, unsigned long index)
|
||||
{
|
||||
if (list == NULL) return; //EMPTY LIST
|
||||
|
||||
why2_node_t *node_to_remove;
|
||||
|
||||
if (index != 0) //SHOULDN'T BE FIRST
|
||||
{
|
||||
why2_node_t *node_before = list -> head;
|
||||
for (unsigned long j = 0; j < index - 1; j++) node_before = node_before -> next; //SCROLL TO THE POSITION
|
||||
|
||||
node_to_remove = node_before -> next;
|
||||
node_before -> next = node_to_remove -> next;
|
||||
} else //ADD BEFORE THE WHOLE LIST
|
||||
{
|
||||
node_to_remove = list -> head;
|
||||
list -> head = node_to_remove -> next;
|
||||
}
|
||||
|
||||
why2_deallocate(node_to_remove -> value);
|
||||
why2_deallocate(node_to_remove);
|
||||
}
|
||||
|
||||
void why2_list_remove_back(why2_list_t *list)
|
||||
{
|
||||
why2_node_t *head = list -> head;
|
||||
|
Loading…
x
Reference in New Issue
Block a user