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

TMI_JUNG님의 프로필 이미지
TMI_JUNG

작성한 질문수

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

삭제 및 결과 검증 코드 작성

연결리스트 삭제 시 헤드노드 NULL인 경우 예외처리의 필요성 재고

해결된 질문

작성

·

305

0

연결리스트 삭제 시 헤드노드가 NULL인 경우를 고려해야 하는 이유가 궁금합니다. 삭제 전에 삭제할 노드를 미리 찾는 과정이 수반되는데, 그 과정은 헤드노드가 NULL값이 아니라는 것을 전제로 이루어집니다.

 

따라서 삭제할 노드를 찾아서 삭제를 진행하는 단계까지 왔다는 것은 헤드노드가 NULL이 아니라는 것을 전제로 한다고 볼 수 있습니다. 그럼에도 불구하고 삭제를 진행하는 함수에서 헤드노드가 NULL인 경우를 고려하시고 이에 대한 예외처리 코드를 작성하셨는데, 혹시 그에 대한 이유가 있을까요?

답변 2

0

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

수업에서는 연결 리스트 구현 시 더미 헤드 노드를 운영하는 방식과 그렇지 않고 포인터만 사용하는 방식 두 가지를 설명합니다. 이 중 실제 데이터가 담긴 노드를 헤드노드에 대한 포인터를 운영하는 방식일 경우 데이터가 리스트에 하나도 없는 경우란 헤드 노드에 대한 포인터가 nullptr인 경우 입니다. 의견을 주신 것처럼 더미 노드를 운운영하는 방식으로 구현 할 때는 연결 리스트에 데이터가 하나도 존재하지 않는 경우라 하더라도 무조건 하나(더미 헤드 노드)는 존재하기 때문에 nullptr인지 고려할 이유가 없겠습니다. 참고하시기 바랍니다. 😄

0

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

TMI_JUNG님, 연결 리스트에서 헤드 노드의 NULL 체크는 중요한 부분입니다.
예외 처리를 통해 헤드 노드가 NULL인지 확인하는 것은 다음과 같은 상황에서 필요합니다:

  1. 함수가 독립적으로 실행되는 경우: 연결 리스트를 관리하는 함수가 다른 부분의 코드와 독립적으로 실행될 수 있기 때문에, 항상 헤드 노드에 대한 검증이 필요합니다. 함수가 언제 어떻게 호출될지 모르므로, 미리 NULL 체크를 함으로써 안정성을 확보할 수 있습니다.

  2. 예상치 못한 오류 대비: 프로그램의 다른 부분에서 오류가 발생하여 헤드 노드가 NULL 상태가 되었을 수 있습니다. 예외 처리를 통해 이러한 오류 상홲에서 안전하게 함수가 동작하도록 보장합니다.

  3. 재사용과 확장성: 현재는 헤드 노드가 NULL이 아닐 것이라는 가정 하에 코드가 작성되어 있지만, 코드를 재사용하거나 기능을 확장할 때, 관련 조건이 달라질 수 있습니다. 예외 처리를 넣어두면 이후 코드를 변경하거나 확장할 때 더 용이합니다.

다시 말해서, 예외 처리는 코드의 안정성을 높이고, 다양한 상황에서 발생할 수 있는 예외 상황에 대비하기 위해 중요합니다. 삭제 함수가 단순히 특정 조건 하에서만 작동한다고 가정하지 않고, 모든 상황에서 안정적으로 작동하도록 설계하는 것이 바람직합니다.

TMI_JUNG님의 프로필 이미지
TMI_JUNG

작성한 질문수

질문하기