diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-07-24 08:02:55 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-07-24 08:02:55 +0200 |
| commit | 5bab06313e71e9827baa426a02bbaf2a00b4e6a0 (patch) | |
| tree | 5604e51c0008088f25b2f5dfb9143a852dd079dd /c12/ex12/ft_list_remove_if.c | |
| parent | 23ad79e8b41c25bb4992d103d29a17612a52e351 (diff) | |
| download | piscine-5bab06313e71e9827baa426a02bbaf2a00b4e6a0.tar.gz piscine-5bab06313e71e9827baa426a02bbaf2a00b4e6a0.tar.bz2 piscine-5bab06313e71e9827baa426a02bbaf2a00b4e6a0.zip | |
c12 passed, c13 start
Diffstat (limited to 'c12/ex12/ft_list_remove_if.c')
| -rw-r--r-- | c12/ex12/ft_list_remove_if.c | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/c12/ex12/ft_list_remove_if.c b/c12/ex12/ft_list_remove_if.c index dc7f310..c6821b8 100644 --- a/c12/ex12/ft_list_remove_if.c +++ b/c12/ex12/ft_list_remove_if.c @@ -6,25 +6,39 @@ /* By: cacharle <charles.cabergs@gmail.com> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/07/19 08:38:28 by cacharle #+# #+# */ -/* Updated: 2019/07/19 08:49:43 by cacharle ### ########.fr */ +/* Updated: 2019/07/23 15:41:03 by cacharle ### ########.fr */ /* */ /* ************************************************************************** */ -void ft_list_remove_if(t_list **begin_list, void *data_ref, int (*cmp)(), void (*free_fct)(void *)) +#include <stdlib.h> +#include "ft_list.h" + +void ft_list_remove_if(t_list **begin_list, void *data_ref, + int (*cmp)(), void (*free_fct)(void *)) { t_list *prev; t_list *cursor; + t_list *tmp; prev = NULL; cursor = *begin_list; - while (cursor) + while (cursor != NULL) { - if ((*cmp)(cursor->data, data_ref)) + while (cursor && (*cmp)(cursor->data, data_ref) == 0) { - if (prev) + if (prev != NULL) prev->next = cursor->next; + else + *begin_list = cursor->next; (*free_fct)(cursor->data); + tmp = cursor; + cursor = cursor->next; + free(tmp); + } + if (cursor != NULL) + { + prev = cursor; + cursor = cursor->next; } - cursor = cursor->next; } } |
