inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

큐 - 구현

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

해결된 질문

441

뇽뇽

작성한 질문수 3

1

 

 

알고리즘

답변 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