아주 기초적인 연결 리스트 개념에 대해 질문드립니다.
설희
void DeleteNode (Node *pPrev)
{
//삭제할 노드
Node *pDelNode = pPrev-pNext;
//삭제할 노드 링크 정보를 저장한다.
pPrev-pNext = pDelNode-pNext;
//노드를 삭제한다.
free(pDellNode);
}
함수 내에서의 둘째줄, 셋째줄은 다 이해가 가는데..
첫째줄은 뭘 의미하는지 모르겠네요. 책에서는 삭제할 노드라는 주석을 달아 놓았는데.
삭제할 노드를 생성한다는 것인가요?.. 결국에 위 함수는 삭제할 노드를 생성해서 그 노드를 다시 삭제한다는 뜻인가요?
헷갈려서 질문드립니다.
-
미쁘다
아.. 두 분 답변 정말 감사드립니다. 그런데 아직도 개념이 안 잡혀서 ㅜ.. 질문 하나 더 있는데 새로 게시글 만들께요 ㅠ
-
헤벌심
이런 문제는 그림으로 그려보면 좀 더 쉽게 이해하실 수 있습니다..
DeleteNode() 함수의 전달받는 인자가 Node *pPrev 인 걸 봐서는
삭제할 노드의 전(前) 노드를 인자로 받는다는 것을 알 수 있으실 겁니다.
그래서 pDelNode 는 pPev-pNext 를 가리키게 만들어주는 거죠.
지워야 할 노드가 인자로 전달받은 pPrev의 다음 노드 즉, pPev-pNext 이기 때문입니다.
그리고 pPev-pNext = pDelNode-p -
새나
현재 이 소스에서는 포인터 pDelNode 가 노드 pPrev의 다음 노드를 가리키고 있는 겁니다.
이렇게 다음노드를 가리키고 있는 상태에서 pDelNode-pNext를 하면 pDelNode의 다음 노드를 가리키겠죠?(결과적으로는 pPrev-pNext(여기까지가 pDelNode)-pNext가 되는겁니다.)
그러니 노드를 생성한다기 보다는 지울 노드를 포인터를 통해 집어낸거죠,