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

TMI_JUNG님의 프로필 이미지
TMI_JUNG

작성한 질문수

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

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

pTmp 변수를 사용하는 이유

해결된 질문

작성

·

327

0

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

답변 1

0

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

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

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

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

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

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

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

TMI_JUNG님의 프로필 이미지
TMI_JUNG

작성한 질문수

질문하기