해결된 질문
작성
·
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;
로 수정해주시면 잘 동작할겁니다!
궁금증이 해결되셨나요? 😊