인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

남가형님의 프로필 이미지
남가형

작성한 질문수

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

연결리스트 - 구현

ReferenceError: currentNode is not defined오류가 납니다ㅠㅠ

해결된 질문

작성

·

468

·

수정됨

1

코드가 중간에 잘못된건지 선생님이 주신 자료를 다운받아 복붙을 해보았는데도 오류가 납니다ㅠㅠ 무엇이 문제인지 봐주시면 감사하겠습니다ㅠㅠㅠ

답변 2

0

남가형님의 프로필 이미지
남가형
질문자

해결되었습니다! 너무 감사합니다ㅠㅠ

0

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

안녕하세요 남가형님!
코드를 살펴봤는데 놓치신게 있어 보입니다.

에러 메시지를 보면

TypeError: Cannot read properties of null (reading 'next')
at LinkedList.insertAt (file:///C:/dev/LinkedList.mjs:48:35)
at file:///C:/dev/test.mjs:25:6

로 test.mjs 파일의 25번 줄에서 문제가 발생했다는 것을 알 수 있습니다.

test.mjs 파일의 25번 줄은

21 console.log("***** insertAt() 다섯 벗 호출 *****")
22 // 3.0부터 4까지 5개의 데이터 삽입
23 list.insertAt(0,0);
24 list.insertAt(1,1);
25 list.insertAt(2,2);

위와 같은 코드로 insertAt를 두 번 호출하고 난 뒤 에러가 발생했습니다.
두 번째까지 잘 동작하다가 왜 오류가 났을까요?

첫 번째 실행을 했을 때는 38번 줄의 if문이 참이 되므로

38 if(index == 0){
39     newNode.next = this.head;
40     this.head = newNode;
41  }

빈 리스트에 삽입이 이루어집니다.

이어서 두 번째 insertAt() 함수가 호출되면 41번 줄이 실행되는데 여기서 문제가 발견됩니다.

41 }else{
42     let currentNode = this.head;
43
44     for(let i = 0; i < index-1; i++){
45         currentNode = currentNode.next;
46     }
47     newNode = currentNode.next; // 에러의 원인이 되는 코드!!
48     cyrrentNode.next = newNode;
49 }

47번 라인에서 newNode의 next를 설정해주는 것이 아니라 newNode를 currentNode의 next로 설정해주셨습니다.

따라서 연결이 제대로 이루어지지 않아서 다음 insertAt() 함수를 호출했을 때 null을 참조했다는 에러가 발생한 것입니다.

47번 라인의 코드를 newNode.next = currentNode.next;로 수정해주시면 잘 동작할겁니다!

궁금증이 해결되셨나요? 😊

남가형님의 프로필 이미지
남가형

작성한 질문수

질문하기