➰ 코딩 부트캠프/42 seoul

[0 Circle] Libft - ft_lstiter, ft_lstmap

 사과개발자 2021. 1. 4. 22:53

📌ft_lstiter

링크드리스트 전부의 content 변수에 함수 f를 적용시킴

void    ft_lstiter(t_list *list, void (*f)(void *));

➕ 매개변수 (Parameters)

  • list : 리스트의 포인터 주소
  • f : 각 리스트에 적용시킬 함수

➕ 반환값 (Return)

  • void : 없음

➕ 설명 (Description)

➕ 코드 (Code)

#include "libft.h"

void    ft_lstiter(t_list *list, void (*f)(void *))
{
    while (list)
    {
        f(list->content);
        list = list->next;
    }
}

📌ft_lstmap

새로운 리스트를 만들어 링크드리스트 전부의 content 변수에 함수 f를 적용시킨 것을 저장하고
그 과정에서 만약 생성에 실패하면 del 함수를 사용하여 전체 리스트를 free시킨다

t_list    *ft_lstmap(t_list *list, void *(*f)(void *), void (*del)(void *));

➕ 매개변수 (Parameters)

  • list : 리스트의 포인터 주소
  • f : 각 리스트에 적용시킬 함수
  • del : content 를 삭제하는데 사용되는 함수

➕ 반환값 (Return)

  • t_list : 새로운 리스트 (할당 실패시 NULL)

➕ 설명 (Description)

➕ 코드 (Code)

#include "libft.h"

t_list    *ft_lstmap(t_list *list, void *(*f)(void *), void (*del)(void *))
{
    t_list    *result;
    t_list    *temp;

    result = NULL;
    while (list)
    {
        temp = ft_lstnew((*f)(list->content));
        if (!temp)
        {
            ft_lstclear(&result, del);
            return (NULL);
        }
        ft_lstadd_back(&result, temp);
        temp = temp->next;
        list = list->next;
    }
    return (result);
}
반응형