ft_lstadd_front 함수 구현하기

윤효준·2024년 8월 13일
0

42 Libft 복습

목록 보기
23/28

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 : 리스트의 맨 앞에 추가할 새로운 노드를 가리키는 포인터이다.

동작 방식

  1. 리스트가 비어 있지 않은 경우 확인 : 함수는 먼저 lstNULL인지 아닌지 확인한다. 이때 lstNULL이면 아무 작업도 수행하지 않고 넘어간다.

  2. 새로운 노드의 next 설정 : 새로운 노드 newnext 필드를 현재의 헤드 노드로 설정한다. 이는 new가 이제 리스트의 첫 번째 노드가 되고, 기존의 첫 번째 노드는 두 번째 노드가 되도록 설정하는 과정이다.

  3. 리스트의 헤드 업데이트 : *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); // 리스트의 맨 앞에 새로운 노드 추가
profile
작은 문제를 하나하나 해결하며, 누군가의 하루에 선물이 되는 코드를 작성해 갑니다.

0개의 댓글