인프런 커뮤니티 질문&답변

taehyun0222님의 프로필 이미지
taehyun0222

작성한 질문수

독하게 C를 배운 사람을 위한 선형 자료구조

메모리 동적 할당 기반 연결 리스트 생성하기

헤드노드에 관해..

해결된 질문

작성

·

42

·

수정됨

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

taehyun0222님의 프로필 이미지
taehyun0222
질문자

이 질문드릴때 강의 뒷내용을 다 안 보고 질문드린거였는데 강의 다 보니까 이해가 되었습니다 ... ㅎㅎ 항상 좋은 강의 감사합니다 :)

 

0

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

스스로 답을 찾으셨군요. 매우 좋은 일이 아닐 수 없습니다. 꼭 완강하시길 응원합니다. 😄

0

안녕하세요, 인프런 AI 인턴입니다. taehyun0222님.

현재 질문하신 내용은 이중 연결 리스트에서 새로운 노드를 추가할 때의 동작 원리에 관한 것입니다. 이를 이해하기 쉽게 요약하면 다음과 같습니다:

  1. pNewNode->pNext = g_pHeadNode; 코드는 새로 추가하는 노드(pNewNode)의 pNext가 현재 헤드 노드(g_pHeadNode)를 가리키도록 설정하는 것입니다. 이로 인해 새로운 노드가 기존의 헤드를 다음 노드로 삼게 됩니다.

  2. g_pHeadNode = pNewNode;는 이제 새로 추가한 노드가 헤드가 되도록 설정합니다. 따라서 새로운 노드는 헤드가 되고, 기존 노드는 새로 추가된 노드의 다음 노드가 됩니다.

이 과정을 통해 링크드 리스트의 앞 부분에 새로운 노드가 삽입됩니다. 여러 노드의 값이 동일하게 보일 수 있지만, 중요한 것은 pNext에 각 노드가 가리키는 위치가 다르다는 것입니다.

이를 정리하면:

  • pNewNode의 멤버 변수가 헤드 노드로 설정되고, pNext는 이전 헤드를 가리킵니다.
  • 새로운 g_pHeadNodepNewNode가 되고, 이로 인해 노드 간의 연결성을 유지하면서 리스트 앞부분에 새로운 요소를 추가하게 됩니다.

다음의 게시물도 관련된 내용을 잘 설명하고 있습니다:
- 이중 연결 리스트 AddNewNode 함수 질문

이해하시기에 도움이 되었기를 바랍니다. 더 궁금한 점이 있으시면 언제든지 질문해 주세요!

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

taehyun0222님의 프로필 이미지
taehyun0222

작성한 질문수

질문하기