inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

pTmp 변수를 사용하는 이유

해결된 질문

463

TMI_JUNG

작성한 질문수 4

0

노드를 추가하는 함수나 해제하는 함수에서 헤드노드를 pTmp변수에 대입한 후에 pTmp값을 가지고 코드를 짜는 게 이유가 있나요? 그냥 pTmp를 사용하지 않고 바로 헤드노드를 사용해도 괜찮지 않나요?

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

답변 1

0

널널한 개발자

가령 헤드 노드가 전역변수 m_head라고 가정했을 때 &m_head는 주소상수 입니다. 연산은 가능하지만 그 값 자체를 바꿀 수는 없습니다.

그리고 연결 리스트 전체를 순회하는 코드를 상수를 이용해 작성 할 경우
&m_head->next->next->next->next 같은 코드가 나올 수 밖에 없습니다. 더 큰 문제는 연결 리스트가 계속 늘어날 수 있는데 이를 코드 수준에서 몇 개 인지 미리 알고 작성 할 수도 없습니다. 이런 문제점을 해결하기 가장 좋은 방법은 다음 노드의 값을 변수에 저장하고 값을 계속해서 갱신하는 방식을 취하는 것입니다.

이렇게 하면 노드의 개수가 몇 개가 되든 코드 수준에서 고려할 필요가 없습니다.

while(pTmp) {
   pTmp = pTmp->next;
}

반복문을 수행하는 것으로 쉽게 전체 노드에 접근 할 수 있기 때문입니다.

만일 헤드노드에 대한 포인터를 사용하는 방식일 경우라 하더라도 헤드 노드에 대한 포인터를 다른 값으로 덮어 써버리는 순간 헤드노드에 대한 주소를 잃게 됩니다. 다시 접근 할 수 없기 때문에 메모리를 해제 할 수도 없게 됩니다. 대략 이 정도로 정리하면 좋을 것 같습니다. 참고하시기 바랍니다. 😄

05_adtFileIO 개정이력에 대한 질문

0

44

2

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

0

62

2

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

0

49

1

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

0

133

2

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

0

126

1

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

0

180

2

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

0

121

1

헤드노드에 관해..

0

233

3

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

0

161

2

Event Loop

0

194

1

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

0

194

1

CPU의 다른 이름 Machine 강의 질의

0

274

4

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

0

260

1

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

0

171

1

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

0

232

2

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

0

193

1

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

0

253

2

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

0

238

2

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

0

280

1

05_adtFileIO 프로젝트 문의

0

320

2

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

0

337

1

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

0

296

1

05_adtFileIO 프로젝트 문의

0

258

1

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

0

306

2