해결된 질문
작성
·
41
·
수정됨
0
계속 그리면서 이해하다가 딜레마에 빠져 질문드립니다 ..
새 노드 추가할때의 그림을 그려보며 이해중이였는데,
else
{
pNewNode->pNext = g_pHeadNode;
g_pHeadNode = pNewNode;
}
이 코드는 이미 헤드노드가 가리키는 '원래노드'가 따로 있는건데
그렇다면 pNewNode의 pNext엔 헤드노드 주소값을 넣으면
pNewNode는 AddNewNode에서 초기화된 각자의 멤버값을 가지면서 pNext를 따라가면 헤드노드가 나오게 되고, 그 헤드노드의 pNext를 따라가면 '원래노드'가 나오게 되는데
그 상태로 g_pHeadNode = pNewNode; 를 수행하게 되면 헤드노드에 pNewNode값이 오버라이트되게 되는건데 그럼 이 상황에선
기존헤드노드에 뉴노드멤버들의 값들과 pNext엔 헤드노드의 주소값, 이걸 따라가면 뉴노드멤버들의 값들과 pNext엔 헤드노드가 가리켰던 '원래노드'의 주소값, 이걸 따라가면 '원래노드'멤버들의 값과 pNext값 . . . 이렇게 생각하면 되는건가요 ?
그럼 결국엔 이 상황에선 g_pHeadNode와 pNewNode는 pNext를 제외한 모든 멤버변수들이 같은값을 가지고 있는 상황인거라고 해석하면 되는건가요 ? ( 뭔가 3개의 노드가 다 다른 멤버변수값을 가져야할것만 같은데, 2개의 노드가 같은 멤버변수값을 가지는거같아 이상하여 이해한게 맞나, 아니면 개념을 잘못잡은건가 싶어 질문드립니다 )
질문이 길어져 죄송합니다 . . .
답변 3
1
0
0
안녕하세요, 인프런 AI 인턴입니다. taehyun0222님.
현재 질문하신 내용은 이중 연결 리스트에서 새로운 노드를 추가할 때의 동작 원리에 관한 것입니다. 이를 이해하기 쉽게 요약하면 다음과 같습니다:
pNewNode->pNext = g_pHeadNode;
코드는 새로 추가하는 노드(pNewNode)의 pNext
가 현재 헤드 노드(g_pHeadNode)를 가리키도록 설정하는 것입니다. 이로 인해 새로운 노드가 기존의 헤드를 다음 노드로 삼게 됩니다.
g_pHeadNode = pNewNode;
는 이제 새로 추가한 노드가 헤드가 되도록 설정합니다. 따라서 새로운 노드는 헤드가 되고, 기존 노드는 새로 추가된 노드의 다음 노드가 됩니다.
이 과정을 통해 링크드 리스트의 앞 부분에 새로운 노드가 삽입됩니다. 여러 노드의 값이 동일하게 보일 수 있지만, 중요한 것은 pNext
에 각 노드가 가리키는 위치가 다르다는 것입니다.
이를 정리하면:
pNewNode
의 멤버 변수가 헤드 노드로 설정되고, pNext
는 이전 헤드를 가리킵니다.g_pHeadNode
는 pNewNode
가 되고, 이로 인해 노드 간의 연결성을 유지하면서 리스트 앞부분에 새로운 요소를 추가하게 됩니다.다음의 게시물도 관련된 내용을 잘 설명하고 있습니다:
- 이중 연결 리스트 AddNewNode 함수 질문
이해하시기에 도움이 되었기를 바랍니다. 더 궁금한 점이 있으시면 언제든지 질문해 주세요!
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.