해결된 질문
작성
·
327
답변 1
0
가령 헤드 노드가 전역변수 m_head라고 가정했을 때 &m_head는 주소상수 입니다. 연산은 가능하지만 그 값 자체를 바꿀 수는 없습니다.
그리고 연결 리스트 전체를 순회하는 코드를 상수를 이용해 작성 할 경우
&m_head->next->next->next->next 같은 코드가 나올 수 밖에 없습니다. 더 큰 문제는 연결 리스트가 계속 늘어날 수 있는데 이를 코드 수준에서 몇 개 인지 미리 알고 작성 할 수도 없습니다. 이런 문제점을 해결하기 가장 좋은 방법은 다음 노드의 값을 변수에 저장하고 값을 계속해서 갱신하는 방식을 취하는 것입니다.
이렇게 하면 노드의 개수가 몇 개가 되든 코드 수준에서 고려할 필요가 없습니다.
while(pTmp) {
pTmp = pTmp->next;
}
반복문을 수행하는 것으로 쉽게 전체 노드에 접근 할 수 있기 때문입니다.
만일 헤드노드에 대한 포인터를 사용하는 방식일 경우라 하더라도 헤드 노드에 대한 포인터를 다른 값으로 덮어 써버리는 순간 헤드노드에 대한 주소를 잃게 됩니다. 다시 접근 할 수 없기 때문에 메모리를 해제 할 수도 없게 됩니다. 대략 이 정도로 정리하면 좋을 것 같습니다. 참고하시기 바랍니다. 😄