연결 리스트(linked list)에서 이중 포인터 사용하기

이대현·2020년 4월 11일
0

C / CPP

목록 보기
2/28

1. 연결 리스트 구현시 이중 포인터를 사용하는 이유

  • 단일 연결리스트에서 삽입과 삭제를 통해 head 포인터의 값을 변화시킬 수 있다.
  • 이때, 호출 함수의 포인터변수가 참조하는 객체를 피호출 함수에서 바꾸고자 할 경우 이중 포인터를 사용하면 된다.
  • t_list **lstt_list 포인터(lst)의 주소를 가리키는 포인터다.
    • t_list **lst 변수가 담고있는 값은 t_list *의 주소
    • t_list **lst가 담고 있는 t_list * 의 주소는 어떤 리스트(lst)의 첫번째 주소
    • 즉, *lst는 head의 주소

2. *lst == NULLlst == NULL 의 차이

  • *lst는 lst의 첫번째 주소, 즉 헤드의 주소를 의미한다. 헤드가 비었다는 건,

    *lst는 빈 리스트 라는 뜻!

  • lst == NULL은 리스트 자체가 존재하지 않는다 뜻!

3. 노드가 NULL인지 검사할 때 적용해보기

void	ft_lstadd_back(t_list **lst, t_list *new_node)
{
	t_list	*curr;

	if (lst == 0 || new_node == 0)
		return ;
	if (*lst == 0)
	{
		*lst = new_node;
		return ;
	}
	curr = *lst;
	while (curr->next)
		curr = curr->next;
	curr->next = new_node;
}

리스트의 제일 마지막에 새 노드를 추가하는 함수. 리스트가 비어있는 지 확인을 먼저 해줘야 한다.

  • lst == 0 이면 함수를 종료시키고,
  • *lst == 0 이면 리스트가 비었으니 *lst, 즉 head의 주소에 새 노드의 주소를 넣어주면 된다.
profile
삽질의 기록들 👨‍💻

0개의 댓글