반응형
lstdelone
void ft_lstdelone(t_list *lst, void (*del)(void *))
현재 가리키고 있는 노드를 삭제 시킴.
free lst와 free content
#include "libft.h"
void ft_lstdelone(t_list *lst, void (*del)(void *))
{
if (lst == NULL || del == NULL)
return ;
del(lst -> content);
free(lst);
}
참고 사이트
lstclear
현재 가리키고 있는 노드부터 뒤에 다 삭제하기
#include "libft.h"
void ft_lstdelone(t_list *lst, void (*del)(void *));
void ft_lstclear(t_list **lst, void (*del)(void *))
{
t_list *temp;
if (lst == NULL || del == NULL)
return ;
while (*lst)
{
temp = (*lst)->next;
ft_lstdelone(*lst, del);
*lst = temp;
}
*lst = 0;
}
참고 사이트
lstiter
노드에 f함수를 적용시키기
#include "libft.h"
void ft_lstiter(t_list *lst, void (*f)(void *))
{
t_list *temp;
temp = lst;
while (temp)
{
(*f)(temp->content);
temp = temp -> next;
}
}
참고 사이트
lstmap
lst를 받아와서 lst가 존재할 때까지 복사를 한다고 생각하면 됨
- temp에 새로운 노드 추가
- temp 노드 생성 실패시 del와 clear를 사용해서 삭제
- 생성된 temp 노드에 content f함수로 적용
- temp와 result = NULL라는 것을 주어서 back에 저장temp끼리 주소값 연결
- 초기값 result에 temp 노드들을 다 저장
- temp 주소에 마지막에 NULL 추가 temp끼리 적용하는 건 back에서 함
#include "libft.h"
t_list *ft_lstnew(void *content);
void ft_lstclear(t_list **lst, void (*del)(void *));
void ft_lstadd_back(t_list **lst, t_list *new);
void ft_lstdelone(t_list *lst, void (*del)(void *));
t_list *ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
{
t_list *result;
t_list *temp;
result = NULL;
while (lst)
{
temp = (t_list *)malloc(sizeof(t_list));
if (!temp)
{
ft_lstclear(&result, del);
return (0);
}
temp->content = (*f)(lst->content);
ft_lstadd_back(&result, temp);
temp->next = 0;
lst = lst->next;
}
return (result);
// t_list *result;
// t_list *temp;
// t_list *mew;
// result = NULL;
// while (lst)
// {
// temp = (*f)(lst->content);
// mew = ft_lstnew(temp);
// if (!mew)
// {
// ft_lstclear(&result, del);
// free(temp);
// return (0);
// }
// ft_lstadd_back(&result, mew);
// lst = lst->next;
// }
// return (result);
}
참고 사이트
반응형
'42Seoul > libft' 카테고리의 다른 글
libft Bonus - lstnew, lstadd_front, lstsize (0) | 2023.03.24 |
---|---|
libft Bonus - Makefile (0) | 2023.03.24 |
libft - ft_putchar_fd, ft_putstr_fd, ft_putendl_fd, ft_putnbr_fd (0) | 2023.03.24 |
libft - strtrim, striteri, split (0) | 2023.03.24 |
libft - strjoin, itoa, strmapi (0) | 2023.03.24 |