터미널에서 isEmpty: false가 나옵니다.ㅜㅜ






답변 1
0
안녕하세요 남가형님!
보내주신 코드로 디버깅해 본 결과 DoublyLinkedList.mjs 파일 내 deleteAt() 함수에서 에러가 발견되었습니다.
결론부터 말씀드리면 deleteAt() 함수 내 95번 라인에 있는 코드는 지워주셔야 합니다!
84 if(index == 0){ //head에 있는 노드 제거
85 let deletedNode = this.head;
86 //데이터가 1개일때와 2개 이상일 떄 구분
87 if(this.head.next == null){
88 this.head = null;
89 this.tail = null;
90 }
91 else{
92 this.head = this.head.next;
93 this.head.prev = null;
94 }
95 this.head = this.head.next; // *사라져야 할 코드*
96 this.count--;
97 return deletedNode;
98 }
이유를 설명하자면
test 코드에서 dequeue()를 진행하면 1, 2, 3순으로 지워서 연결리스트는 비워지게 됩니다.
여기서 dequeue()를 3번 호출하면 빈 리스트이지만, this.head.next로 이미 this.head는 null인데 null객체에서 next를 호출하므로 예외가 발생합니다.
하지만 이 예외는 남가형님에게 표시되지 않아서 이유를 찾기 힘들었을거라고 생각합니다 ㅎㅎ
이 예외가 표시되지 않은 이유는
Queue.mjs파일 내 dequeue()함수에서 볼 수 있는데요.
dequeue(){ //마지막 데이터 제거
try{ //예외 처리
return this.list.deleteLast();
}catch(e){
//console.log(e);
return null;
}
}this.list.deleteLast()함수를 호출하며 try로 예외 처리를 해주었지만
예외가 발생한 경우는 return null;을 하면서 자연스럽게 넘어갔습니다.
따라서 DoublyLinkedList.mjs파일의 deleteAt() 함수에서 count--;가 호출되지 않은 상태로 '정상적인 상태로 처리'되어 count가 1로 유지되면서 isEmpty함수가 false를 출력했습니다.
위 코드에서 제가 주석 처리한 부분(console.log(e))에서 주석을 제거 해주면 예외 메시지를 확인할 수 있을 겁니다.
궁금증이 해결되셨나요?😁
연결리스트 삽입삭제 O(1) 아닌가요?
0
20
2
큐의 마지막 데이터가 head에 위치해야 하는 이유가 궁금합니다.
0
76
2
이중연결 리스트 데이터 삭제시 질문이 있습니다.
1
67
2
자바스크립트 배열은 동적이 아닌가요?
1
89
2
자바스크립트 배열
0
80
2
코테에서 링크리스트 자료구조를 사용해야 하면, 이번 강의에서 구현한 메서드들도 모두 직접 구현하면 되나요?/
0
157
2
공부 방식 질문 드립니다.
1
120
2
메모이제이션과 타뷸레이션 관련해서 질문드립니다.
1
171
2
병합정렬에서 질문이 있습니다.
2
143
1
병합정렬 질문 있습니다.
1
140
5
데이터 삽입, 삭제 함수 오류 범위 설정
0
159
2
해시 테이블에서 질문이 잇습니다.
2
130
2
시간복잡도 계산 시 1회 연산당 연산량은 왜 고려하지 않는 건가요?
1
149
2
터미널 설정
0
116
2
2:13분 관련 질문입니다
0
94
1
8:47초경부터 9:00초까지 질문입니다.
1
137
2
tail을 삭제하는 경우에 관련해서 질문이 있습니다.
0
109
1
2:36초 head 위치가?
1
114
2
환경구축강의 중 터미널 파일 실행오류
0
166
2
4:58 이중for문 질문있습니다.
0
107
1
hanoi함수 처음 호출에 대해서 여쭤봅니다.
1
135
2
해쉬테이블 데이터 관련해서 질문있습니다.
0
152
2
자바스크립트 Map과 어떤 차이가 있나요??
0
206
2
질문이있습니다.
0
107
1





