ft_lstmap

J_JEON·2022년 1월 18일
0

libft

목록 보기
43/44

💻 함수명

연결리스트 각 노드의 content에 f함수를 적용시켜 새 연결리스트를 생성하고 반환해주는 함수

📃 함수명 원형

t_list	*ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))

🔩 parameters

*lst : f를 적용시켜 새 연결리스트를 만들 원본 연결리스트의 head
*f : content에 적용시킬 함수의 포인터
*del : 삭제가 필요할때 사용할 함수의 포인터

📬 return

t_list *형 반환

  • 연결리스트 각 노드의 content에 f함수를 적용시켜 새 연결리스트를 생성하고 반환

🧨 주의사항

  • 새 연결리스트의 저장공간 할당에 실패했을경우 모든 데이터를 지우고 free 해주어야 함
  • 하나의 노드를 새로 만들고 ft_lstadd_back을 사용해 마지막 노드에 새 노드를 연결해줌
  • 마지막으로 더이상 필요하지않은 newnode를 NULL로 초기화해줌
  • lst가 NULL이면 다른 lst함수들은 오류가 발생하도록 했지만 이 함수는 NULL인 함수가 복사되어 반환됨

⌨ 코드


#include "libft.h"

t_list	*ft_lstmap(t_list *lst, void *(*f)(void *), void (*del)(void *))
{
	t_list	*savenode;
	t_list	*newlist;
	t_list	*newnode;

	savenode = lst;
	newlist = NULL;
	while (savenode)
	{
		newnode = ft_lstnew(f(savenode->content));
		if (newnode == NULL)
		{
			ft_lstclear(&newlist, del);
			return ((void *)(0));
		}
		ft_lstadd_back(&newlist, newnode);
		savenode = savenode->next;
	}
	newnode = NULL;
	return (newlist);
}

profile
늅늅

0개의 댓글