void ft_list_remove_if(t_list **begin_list, void *data_ref, \ in"> void ft_list_remove_if(t_list **begin_list, void *data_ref, \ in"> void ft_list_remove_if(t_list **begin_list, void *data_ref, \ in">
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* ft_list_remove_if.c :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: jayang <[email protected]> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/02/23 19:46:11 by jayang #+# #+# */
/* Updated: 2022/02/24 10:51:15 by jayang ### ########.fr */
/* */
/* ************************************************************************** */
#include "ft_list.h"
#include <stdlib.h>
void ft_list_remove_if(t_list **begin_list, void *data_ref, \\
int (*cmp)(), void (*free_fct)(void *))
{
t_list *next_level;
t_list *tmp;
if (*begin_list == 0)
return ;
next_level = *begin_list;
while (next_level && next_level->next)
{
if ((*cmp)(next_level->next->data, data_ref) == 0)
{
tmp = next_level->next;
(*free_fct)(tmp->data);
next_level->next = next_level->next->next;
free(tmp);
}
next_level = next_level->next;
}
next_level = *begin_list;
if (next_level && (*cmp)(next_level->data, data_ref) == 0)
{
*begin_list = next_level->next;
(*free_fct)(next_level);
free(next_level);
}
}