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

이동근님의 프로필 이미지
이동근

작성한 질문수

그림으로 쉽게 배우는 자료구조와 알고리즘 (기본편)

연결리스트 - 구현

연결리스트 질문입니다.

해결된 질문

작성

·

390

2

선생님 안녕하세요. 질문이 있습니다.

1️⃣ insertAt() 함수에서 에러 처리할 때

if(index > this.count) 마지막 인덱스에 데이터가 삽입이 될 수 있어서 초과로 한걸까요?

deleteAt(), getNodeAt() 함수에서 에러 처리할 때

if(index >= this.count) 마지막 인덱스가 없기 때문에 이상으로 한걸까요?

헤깔려서 정리하면서 여쭤봅니다.

2️⃣ insert 함수 만들 때와 다르게 delete, getNode 함수 만들 때 return 한 이유가 궁금합니다.

강의를 반복해서 듣는데. 헤깔리는게 자꾸 생기네요ㅜ..ㅎ

 

답변 1

0

감자님의 프로필 이미지
감자
지식공유자

안녕하세요 이동근님!
insertAt()함수와 deleteAt(), getNodeAt() 함수의 에러처리가 조금 달라서 머리가 아프시나보군요?
insertAt() 혼자 조건문이 다른 이유는 함수의 성격이 조금 달라서 그렇습니다.

연결리스트에 데이터가 1, 2, 3 이렇게 3개가 삽입되어 있다고 가정하겠습니다.
그럼 1은 0번, 2는 1번, 3은 2번 인덱스로 접근할 수 있습니다.

1️⃣
deleteAt(index)함수는 index에 해당하는 데이터를 제거하는 함수이고,
getNodeAt(index)함수는 index에 해당하는 데이터를 얻는 함수입니다.
반면 insertAt(index)함수는 index에 해당하는 '위치'에 데이터를 삽입하는 함수입니다.

차이점이 느껴지시나요?
deleteAt()함수와 getNodeAt()함수는 해당 인덱스에 이미 존재하는 데이터를 참조해야합니다.
따라서 데이터를 참조하는 범위가 총 데이터의 수(count)보다 작아야만 합니다.
연결리스트에 데이터가 3개 있는데 3번 인덱스에 접근하면 범위를 넘어선 것이겠죠?
따라서 if(index >= count) 라는 조건식이 붙은겁니다.

반면 indexAt()함수는 해당 인덱스에 데이터를 삽입하는 것이기 때문에 연결리스트에 존재하는 데이터의 범위에서 하나를 더 오버할 수 있습니다.
1,2,3 이렇게 3개가 있는 배열에서 삽입은
1과 2사이, 2와3사이뿐만 아니라 3번 인덱스, 즉 2번 인덱스인 3 뒤에도 삽입할 수 있기 때문에
if(index > count) 라는 조건식이 붙은겁니다.

2️⃣
deleteAt()함수는 제거된 노드를 확인하기 위해서 리턴을 했습니다.(보통 제거하는 함수는 제거된 데이터를 리턴합니다.)
getNodeAt() 함수는 이름에서 알 수 있듯이 해당 인덱스에 있는 노드를 얻기 위한 함수이므로 리턴을 했습니다.
insertAt()함수는 왜 리턴을 하지 않았나 궁금해 하셨는데 insertAt()함수의 결과가 필요로 하지 않아서 리턴하지 않았습니다.
만약 이동근님은 insertAt()함수를 호출하고 생성한 노드를 확인하고 싶으시다면 insertAt()함수에 리턴을 추가해도 상관없습니다 ㅎㅎ

필요에 따라서 리턴은 할 수도 있고 하지 않을 수도 있습니다!

궁금증이 해결되셨나요?

이동근님의 프로필 이미지
이동근
질문자

자세한 설명 감사합니다!

이해가 너무 잘됐습니다~👍💪
insertAt()함수 같은 경우는 parameter가 insertAt(index, data)라서 확인을 안해도 될 것 같네요!

감사합니다.

이동근님의 프로필 이미지
이동근

작성한 질문수

질문하기