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

단일 연결리스트에서 삽입과 삭제를 통해 head 포인터의 값을 변화시킬 수 있다.이때, 호출 함수의 포인터변수가 참조하는 객체를 피호출 함수에서 바꾸고자 할 경우 이중 포인터를 사용하면 된다.

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의 주소에 새 노드의 주소를 넣어주면 된다.

Last updated