• 카테고리

    질문 & 답변
  • 세부 분야

    알고리즘 · 자료구조

  • 해결 여부

    해결됨

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

23.03.30 17:21 작성 23.03.30 17:45 수정 조회수 376

1

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

답변 2

·

답변을 작성해보세요.

0

남가형님의 프로필

남가형

질문자

2023.03.30

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

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;로 수정해주시면 잘 동작할겁니다!

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