인프런 커뮤니티 질문&답변
스택의 POP코드 질문드립니다.
해결된 질문
작성
·
259
0
안녕하세요 오랜만에 질문드립니다.
현재 가정을 헤드노드->Test03->Test02->Test01->테일노드 이렇게 있다고 가정을 했을 때
pPop->pNext->pPrev = g_TailNode.pPrev; 이 코드에서 질문있습니다.
제가 이해한것을 풀어쓰느라 조금 길거 같습니다.
흐름상 pop 구조체 포인터가 Test03노드를 가리키고 있고 헤드의 다음노드를 Test02로 바꾸는것까지 이해했습니다.
그다음 pop 다음 노드의 이전 노드 즉 Test02의 이전 노드가 테일 노드의 이전 노드를 가리킨다고 하는데 현재 흐름 상 보면 Test03의 다음노드의 이전노드가 Test01노드라고 하는걸로 해석이 됩니다.
제가 어느 부분에서 이해를 못한 건지 모르겠습니다.
그리고 다음 코드를 이렇게 고쳐도 출력에는 이상이 없는 것으로 확인됩니다.

퀴즈
단일 연결 리스트에 더미 헤드 노드를 사용하는 주된 장점은 무엇일까요?
메모리 사용량 감소
리스트 연산 시 예외 처리 단순화
데이터 검색 속도 향상
이중 연결 리스트로 쉽게 전환 가능
답변 1
0
스택에 노드가 하나 뿐이면 모르겠지만 pPop->pNext 노드가 Test03의 다음 노드가 될 수 있는데 그렇다면 Test02가 되어야 하겠습니다. 그런데 그것이 g_TailNode와 관련이 있을 수도 있고 아닐 수도 있습니다. 즉, 스택에 더 꺼낼 노드가 남아 있다면 g_TailNode가 바로 등장할 이유는 없겠습니다.
그리고 출력에 이상이 없다고 했는데...
Test03->Test02->Test01 이렇게 세 노드가 있는 상태에서 데이터를 하나 Pop한 후 출력해보시기 바랍니다. 아마도 유실되는 노드가 있을 것입니다. 이에 관한 문제의 원인을 찾아 분석해보시기를 권합니다. 😄





