
ft_lstadd_front 함수는 리스트의 맨 앞에 새로운 노드를 추가하는 역할을 한다.
typedef struct s_list
{
void *content;
struct s_list *next;
} t_list;
void ft_lstadd_front(t_list **lst, t_list *new)
{
if (lst != 0)
new->next = *lst;
*lst = new;
}
t_list **lst : 리스트의 헤드(첫 번째 노드)를 가리키는 포인터의 주소이다. 이중 포인터를 사용함으로써 함수 내에서 리스트의 헤드 자체를 변경할 수 있다.
t_list *new : 리스트의 맨 앞에 추가할 새로운 노드를 가리키는 포인터이다.
리스트가 비어 있지 않은 경우 확인 : 함수는 먼저 lst가 NULL인지 아닌지 확인한다. 이때 lst가 NULL이면 아무 작업도 수행하지 않고 넘어간다.
새로운 노드의 next 설정 : 새로운 노드 new의 next 필드를 현재의 헤드 노드로 설정한다. 이는 new가 이제 리스트의 첫 번째 노드가 되고, 기존의 첫 번째 노드는 두 번째 노드가 되도록 설정하는 과정이다.
리스트의 헤드 업데이트 : *lst = new;를 통해 리스트의 헤드를 new로 변경한다. 이제 new가 리스트의 첫 번째 노드가 된다.
ft_lstadd_front 함수가 리스트의 헤드 포인터를 수정해야 하기 때문에 이중 포인터가 필요하다.
단일 포인터(t_list *lst)로 전달되면 함수 내부에서 리스트의 헤드를 변경해도 함수 호출자에게 반영되지 않는다. 마치 int를 전달받아 함수 내부에서 변경해도 반영이 되지 않는 이치와 같다.
t_list *head = NULL; // 초기 리스트는 비어 있음
t_list *new_node = malloc(sizeof(t_list)); // 새로운 노드 생성
new_node->content = "Hello, World!";
new_node->next = NULL;
ft_lstadd_front(&head, new_node); // 리스트의 맨 앞에 새로운 노드 추가