ft_lstdelone 구현
1. ft_lstdelone 용도
* 파라미터로 받은 t_list 포인터 lst의 content를 del()함수를 통해 삭제하고 free함수를 통해 lst를 할당 해제하는 함수
2. 연결 리스트(linked list)분석
-
연결 리스트는 배열과 같은
선형 자료구조
로, 하단의 사진과 같이 노드들이 메모리 상에 연속적으로 저장되어 있지 않고포인터로 연결
되어 있는 리스트이다. -
링크드 리스트의 제일 첫 노드를 가리키는 포인터가 있다.(하단의 사진에서는 head 변수)
-
각 노드들은 value를 저장하는
data
변수와 다음 노드의 주소값을 저장하는 포인터 변수next
로 구성된다.
3. *lst == NULL과 lst == NULL의 차이
-
lst가 NULL이면 리스트 자체가 존재하지 않는다는 뜻이다.
-
*lst는 lst의 첫번째 주소, head를 의미하므로 리스트 내에 노드가 존재하지 않는다는 뜻이다.
4. t_list와 ft_lstdelone()
- ft_lstdelone 함수에서는 t_list 구조체의
인스턴스
가 노드이며, t_list 구조체는 아래와 같다.
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
- ft_lstdelone 함수에서 제거할 노드의 주소를 가리키는 t_list 포인터는
lst
이며, lst의 content를 삭제하는 함수 포인터가 del()이다. 즉, lst는 t_list 포인터이며 lst의 content를 제거하기 위해 del함수를 이용해야 한다.
5. ft_lstdelone 프로토타입
void ft_lstdelone(t_list *lst, void (*del)(void *))
t_list *lst : t_list 포인터
void (*del)(void *) : lst의 content 멤버변수를 free하기 위한 함수 포인터
6. 구현 시 유의사항
-
lst가 NULL이면 리스트가 비어 있다는 뜻. 이 때에는 삭제할 리스트가 없는 것이므로 return;
-
del()함수가 NULL이면 lst의 content를 free하는 기능을 수행하지 못하므로 바로 return;
7. 코드 구현
void ft_lstdelone(t_list *lst, void (*del)(void *))
{
if (lst == NULL || del == NULL)
return ;
del(lst->content);
free(lst);
}
8. 코드 구현 방법
(1) lst가 NULL이면 리스트가 비어 있다는 것, 즉 삭제할 리스트가 없는 것이므로 return, del이 NULL이면 lst의 content를 free할 수 없으므로 return;
(2) del함수를 통해 lst의 content free시킴
(3) lst를 free
Author And Source
이 문제에 관하여(ft_lstdelone 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yeunjoo121/ftlstdelone저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)