개발자 블로그

[Linked List Stack]Push 함수 구현시 Top 노드의 NextNode 본문

자료구조_구현시 실행착오 정리

[Linked List Stack]Push 함수 구현시 Top 노드의 NextNode

youngsunny 2024. 4. 24. 01:57

 

void LLS_Push(LinkedListStack* Stack,Node* newNode) {  
    //이제 Node변수가 heap 할당되어 변수로 넘어올거고
    //Stack->head, Top 에다가 매칭해서 넣어줘야 한다.
    //Stack->head가 존재하는지 확인
    if (Stack->headNode == NULL) {
        Stack->headNode = newNode;
        //Stack->tailNode = newNode;
        printf("Push, headNode %p\n", newNode);
    }
    else {
        Stack->tailNode->nextNode = newNode;
        //printf("Push, tailNode 뒤에 newNode, %p\n", newNode);
    }
    Stack->tailNode = newNode;
    printf("Push, tailNode %p\n", newNode);
}

else 문 안 Stack->Top->NextNode = newNode 해주는 이유가 있을까요?

생략해도 잘 돌아가는거 같습니다.

 

셀프 답변

 

Stack->Node 생성후 맨처음 Push 함수 실행시

headNode에 노드 주소를 넣는다. 

TopNode( Stack->tailNode  )에 동일한 노드주소를 넣고 함수를 나간다. 

이후 push 호출시 새로운 노드가 오게 되는데

headNode 대신 Stack->tailNode->nextNode  에 새로운 노드주소를 넣고

여기서 잘봐야하는게 지금 Stack->tailNode 의 이전의 push  함수 실행시 발생했던 동작때문에 주소위치는 HeadNode와 같다. 결국엔 headNode의 next에 새로운 노드주소가 입력되게 되는것이다. 

그리고 동일하게

TopNode(Stack->Top)에 새로운 노드 주소를 넣고 Push 함수를 빠져 나간다.