inflearn logo
강의

Khóa học

Chia sẻ kiến thức

C ngôn ngữ cho những người học nghiêm túc về cấu trúc dữ liệu tuyến tính

Tạo danh sách liên kết dựa trên cấp phát bộ nhớ động

헤드노드에 관해..

Đã giải quyết

231

taehyun0222

3 câu hỏi đã được viết

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개의 노드가 같은 멤버변수값을 가지는거같아 이상하여 이해한게 맞나, 아니면 개념을 잘못잡은건가 싶어 질문드립니다 )

질문이 길어져 죄송합니다 . . .

c 코딩-테스트 알고리즘 vc++

Câu trả lời 3

1

taehyun0222

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

 

0

nullnull8537

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

0

communityai8509

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

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

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

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

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

이를 정리하면:

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

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

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

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

05_adtFileIO 개정이력에 대한 질문

0

42

2

마지막 열의 노드를 삭제하였을때 읽기 엑세스 위반 발생 건

0

61

2

첫번째 루프에서 최소값을 못찾았는데 계속 진행하는 이유가 무엇인가요?

0

47

1

[질문]: [섹션4] -> [2중 연결 리스트로 전환] -> [21:30]

0

130

2

인덱스정렬 강의, 04_ListAndIndex질문드립니다.

0

125

1

예제는 어디서 다운로드 받을 수 있나요?

0

178

2

04_MultiIndex 예제에서 질문이 있습니다

0

120

1

AddNewNode 함수 구현시 질문입니다.

0

160

2

Event Loop

0

191

1

인덱스정렬 강의, 04_ListAndIndex질문드립니다.

0

192

1

CPU의 다른 이름 Machine 강의 질의

0

273

4

스택의 POP코드 질문드립니다.

0

259

1

adtFileIO 예제코드관련 질문 있습니다.

0

170

1

ADT강의 관련 질문 있습니다.

0

231

2

RangeSearch002 의 singlelist.c 파일 중 질문 있습니다.

0

192

1

섹션4 자료 자체와 정렬된 인덱스 분리 내용 질문

0

252

2

자료 자체와 정렬된 인덱스 분리 강의에서 질문

0

234

2

구현 연습에 대한 개인적 의문

0

279

1

05_adtFileIO 프로젝트 문의

0

318

2

CLI UI적용 강의에서 질문드립니다.

0

333

1

SearchToRemove와 RemoveNode가 분리되어야 할 필요가 있을까요?

0

293

1

05_adtFileIO 프로젝트 문의

0

257

1

자료 자체와 정렬된 인덱스 분리 (인덱스 정렬) - 인덱스 범위 코드에 버그가 있어서 질문 드립니다.

0

304

2

강의자료 관련

0

203

1