* t_list 연결 리스트 lst의 맨 앞에 new라는 t_list 노드를 추가하는 함수
연결 리스트는 배열과 같은 선형 자료구조
로, 하단의 사진과 같이 노드들이 메모리 상에 연속적으로 저장되어 있지 않고 포인터로 연결
되어 있는 리스트이다.
링크드 리스트의 제일 첫 노드를 가리키는 포인터가 있다.(하단의 사진에서는 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
이며, 추가할 노드의 주소
를 가리키는 t_list 포인터는 new
이다. 즉, lst는 t_list 포인터를 가리키며 현재 *lst가 가리키는 곳은 연결 리스트의 제일 첫번째 노드
이다.ft_lstadd_front(t_list **lst, t_list *new)
t_list 포인터의 주소
를 가리키는 변수노드의 주소
를 가리키는 포인터 변수lst가 NULL이면 리스트가 존재하지 않고, new가 NULL이면 new노드가 존재하지 않는다는 뜻. 이 때에는 추가할 노드가 없거나 추가할 리스트가 없는 것이므로 return;
*lst 가 NULL이고 new가 NULL이 아니면 현재 추가할 노드는 있고 리스트도 존재한다. 그러나 *lst가 NULL이면 제일 첫번째 노드가 존재하지 않는다는 뜻이니 바로 new를 추가하면 된다.
#include "libft.h"
void ft_lstadd_front(t_list **lst, t_list *new)
{
if (new == NULL)
{
return ;
}
new->next = *lst;
*lst = new;
}
(1) lst == NULL이거나 new == NULL이면 노드를 리스트에 추가할 수 없으므로 바로 return;
(2) 1번에 해당지 않으면 lst리스트에 new 노드 추가 가능.
new->next가 lst를 가리키게 함.
lst가 new를 가리키게 하면 리스트의 맨 앞에 new 노드 추가하는 것.