ft_lstclear

jaehlee·2025년 4월 27일

Libft

목록 보기
23/26

linked list 설명

배열(Array) & 연결리스트(Linked List)
해당 페이지에 설명해두었음.

ft_lstclear를 구현하기 위해 libft.h파일에

typedef struct s_list
{
	void			*content;
	struct s_list	*next;
}					t_list;

이 구조체를 추가해야한다.

1. ft_lstclear란?


리스트 전체를 순회하면서 모든 노드를 제거하고 리스트 포인터를 NULL로 초기화하는 함수이다.

2. 함수 프로토타입

void	ft_lstclear(t_list **lst, void (*del)(void	*))

3. 함수구현

#include "libft.h"

void	ft_lstclear(t_list **lst, void (*del)(void	*))
{
	t_list	*cur;

	if (lst == NULL || del == NULL)
		return ;
	while (*lst)
	{
		cur = (*lst)->next;
		ft_lstdelone(*lst, del);
		*lst = cur;
	}
	*lst = 0;
}

작동방식

  1. 리스트를 순회하면서 현재노드를 cur에 잠시 저장하고 현재 노드를 ft_lstdelone으로 삭제한다
  2. 그다음 *lst를 다음노드(cur)로 이동한다.
  3. 이 방식을 반복하며 삭제하며 모든 노드가 삭제되면 *lst를 NULL로 설정한다.

사용예시

void del(void *content)
{
	free(content);
}

int main(void)
{
	t_list *list = NULL;
	char *str1 = malloc(20);
	char *str2 = malloc(20);
	char *str3 = malloc(20);

	if (!str1 || !str2 || !str3)
		return (1);

	sprintf(str1, "node1");
	sprintf(str2, "node2");
	sprintf(str3, "node3");

	ft_lstadd_back(&list, ft_lstnew(str1));
	ft_lstadd_back(&list, ft_lstnew(str2));
	ft_lstadd_back(&list, ft_lstnew(str3));

	ft_lstclear(&list, del);

	if (list == NULL)
		printf("List cleared successfully.\n");

	return (0);
}
profile
공부하는 개발자

0개의 댓글