diff options
| author | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-21 17:33:28 +0100 |
|---|---|---|
| committer | Thomas Vanbesien <tvanbesi@proton.me> | 2026-02-21 17:33:28 +0100 |
| commit | 7a34b3d412f5022d4ce25d84ec7fb4002b1fb5db (patch) | |
| tree | 9546a74914e750e747adb2d9adcd7b67f96adf24 /src | |
| parent | 9bb8e5cd549eca189ce183f40f771c2a614ea8f6 (diff) | |
| download | Libft-7a34b3d412f5022d4ce25d84ec7fb4002b1fb5db.tar.gz Libft-7a34b3d412f5022d4ce25d84ec7fb4002b1fb5db.zip | |
Implement libft Part 3 (linked lists) with tests
Add t_list struct and 9 linked list functions: ft_lstnew,
ft_lstadd_front, ft_lstsize, ft_lstlast, ft_lstadd_back,
ft_lstdelone, ft_lstclear, ft_lstiter, ft_lstmap.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ft_lstadd_back.c | 15 | ||||
| -rw-r--r-- | src/ft_lstadd_front.c | 8 | ||||
| -rw-r--r-- | src/ft_lstclear.c | 19 | ||||
| -rw-r--r-- | src/ft_lstdelone.c | 9 | ||||
| -rw-r--r-- | src/ft_lstiter.c | 11 | ||||
| -rw-r--r-- | src/ft_lstlast.c | 11 | ||||
| -rw-r--r-- | src/ft_lstmap.c | 26 | ||||
| -rw-r--r-- | src/ft_lstnew.c | 15 | ||||
| -rw-r--r-- | src/ft_lstsize.c | 15 | ||||
| -rw-r--r-- | src/ft_split.c | 1 |
10 files changed, 130 insertions, 0 deletions
diff --git a/src/ft_lstadd_back.c b/src/ft_lstadd_back.c new file mode 100644 index 0000000..076cae9 --- /dev/null +++ b/src/ft_lstadd_back.c @@ -0,0 +1,15 @@ +#include "libft.h" + +void +ft_lstadd_back (t_list **lst, t_list *new) +{ + t_list *last; + + if (!*lst) + { + *lst = new; + return; + } + last = ft_lstlast (*lst); + last->next = new; +} diff --git a/src/ft_lstadd_front.c b/src/ft_lstadd_front.c new file mode 100644 index 0000000..e689412 --- /dev/null +++ b/src/ft_lstadd_front.c @@ -0,0 +1,8 @@ +#include "libft.h" + +void +ft_lstadd_front (t_list **lst, t_list *new) +{ + new->next = *lst; + *lst = new; +} diff --git a/src/ft_lstclear.c b/src/ft_lstclear.c new file mode 100644 index 0000000..4c738b7 --- /dev/null +++ b/src/ft_lstclear.c @@ -0,0 +1,19 @@ +#include "libft.h" +#include <stdlib.h> + +void +ft_lstclear (t_list **lst, void (*del) (void *)) +{ + t_list *cur; + t_list *next; + + cur = *lst; + while (cur) + { + next = cur->next; + del (cur->content); + free (cur); + cur = next; + } + *lst = NULL; +} diff --git a/src/ft_lstdelone.c b/src/ft_lstdelone.c new file mode 100644 index 0000000..1fe570f --- /dev/null +++ b/src/ft_lstdelone.c @@ -0,0 +1,9 @@ +#include "libft.h" +#include <stdlib.h> + +void +ft_lstdelone (t_list *lst, void (*del) (void *)) +{ + del (lst->content); + free (lst); +} diff --git a/src/ft_lstiter.c b/src/ft_lstiter.c new file mode 100644 index 0000000..84fc000 --- /dev/null +++ b/src/ft_lstiter.c @@ -0,0 +1,11 @@ +#include "libft.h" + +void +ft_lstiter (t_list *lst, void (*f) (void *)) +{ + while (lst) + { + f (lst->content); + lst = lst->next; + } +} diff --git a/src/ft_lstlast.c b/src/ft_lstlast.c new file mode 100644 index 0000000..68b6337 --- /dev/null +++ b/src/ft_lstlast.c @@ -0,0 +1,11 @@ +#include "libft.h" + +t_list * +ft_lstlast (t_list *lst) +{ + if (!lst) + return (NULL); + while (lst->next) + lst = lst->next; + return (lst); +} diff --git a/src/ft_lstmap.c b/src/ft_lstmap.c new file mode 100644 index 0000000..c001a2d --- /dev/null +++ b/src/ft_lstmap.c @@ -0,0 +1,26 @@ +#include "libft.h" +#include <stdlib.h> + +t_list * +ft_lstmap (t_list *lst, void *(*f) (void *), void (*del) (void *)) +{ + t_list *new_list; + t_list *node; + void *content; + + new_list = NULL; + while (lst) + { + content = f (lst->content); + node = ft_lstnew (content); + if (!node) + { + del (content); + ft_lstclear (&new_list, del); + return (NULL); + } + ft_lstadd_back (&new_list, node); + lst = lst->next; + } + return (new_list); +} diff --git a/src/ft_lstnew.c b/src/ft_lstnew.c new file mode 100644 index 0000000..37412b4 --- /dev/null +++ b/src/ft_lstnew.c @@ -0,0 +1,15 @@ +#include "libft.h" +#include <stdlib.h> + +t_list * +ft_lstnew (void *content) +{ + t_list *node; + + node = malloc (sizeof (t_list)); + if (!node) + return (NULL); + node->content = content; + node->next = NULL; + return (node); +} diff --git a/src/ft_lstsize.c b/src/ft_lstsize.c new file mode 100644 index 0000000..2986498 --- /dev/null +++ b/src/ft_lstsize.c @@ -0,0 +1,15 @@ +#include "libft.h" + +int +ft_lstsize (t_list *lst) +{ + int count; + + count = 0; + while (lst) + { + count++; + lst = lst->next; + } + return (count); +} diff --git a/src/ft_split.c b/src/ft_split.c index bb51c85..966ce5f 100644 --- a/src/ft_split.c +++ b/src/ft_split.c @@ -21,6 +21,7 @@ _s_count_words (char const *s, char c) return (count); } +/** Free the first @p n elements of @p arr, then @p arr itself. */ static void _s_free_all (char **arr, size_t n) { |
