* f_list 포인터 lst와 그 lst에 연결된 모든 리스트의 content에 f를 적용하는 함수
연결 리스트는 배열과 같은 선형 자료구조
로, 하단의 사진과 같이 노드들이 메모리 상에 연속적으로 저장되어 있지 않고 포인터로 연결
되어 있는 리스트이다.
링크드 리스트의 제일 첫 노드를 가리키는 포인터가 있다.(하단의 사진에서는 head 변수)
각 노드들은 value를 저장하는 data
변수와 다음 노드의 주소값을 저장하는 포인터 변수 next
로 구성된다.
lst가 NULL이면 리스트 자체가 존재하지 않는다는 뜻이다.
*lst는 lst의 첫번째 주소, head를 의미하므로 리스트 내에 노드가 존재하지 않는다는 뜻이다.
인스턴스
가 노드이며, t_list 구조체는 아래와 같다.typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
t_list 포인터
변수가 lst
이며 lst의 content에 적용할 함수 포인터가 f()이다. 즉, lst는 t_list 포인터이며 lst의 content에 f를 적용시키기 위해 f함수를 이용해야 한다.void ft_lstiter(t_list *lst, void (*f)(void *))
t_list *lst : t_list 포인터
void (*f)(void *) : lst의 content에 f적용
*lst는 포인터이므로 lst를 lst->next로 바꾸게 되면 호출한 함수 뿐만 아니라 전체 코드에서 lst의 값이 바뀌게 된다.
--> 따라서 lst의 주소를 cur라는 t_list 포인터에 저장 후 cur을 이용해 리스트를 탐색한다.
cur을 이용해 리스트를 탐색하고, cur의 content에 f를 적용한 후 cur이 cur의 next주소를 가리키게 함.
#include "libft.h"
void ft_lstiter(t_list *lst, void (*f)(void *))
{
t_list *cur;
cur = lst;
while (cur)
{
f(cur->content);
cur = cur->next;
}
}
(1) cur에 lst를 저장해 cur을 이용해 리스트를 탐색한다.
(2) cur이 NULL이 아닐 때 cur의 content에 f를 적용한다.
(3) cur이 cur의 다음 노드의 주소를 가리키게 한다.
(4) 2, 3을 반복한다.