inflearn logo
강의

Course

Instructor

Data Structures and Algorithms Made Easy with Diagrams (Basics)

Queue - Implementation

tail을 삭제하는 경우에 관련해서 질문이 있습니다.

106

dlwlals1207

12 asked

0

안녕하세요 감자님. 큐 구현 강의 중 tail 부분을 삭제하는 코드에 관련해서 질문이 있어서 글을 남기게 되었습니다.

else if (index == this.count - 1) {
        let deleteNode = this.tail; // 삭제할 노드
        this.tail = this.tail.prev; // 기존 tail의 이전 노드를 새로운 tail로 설정
        this.tail.next = null; // 새로운 tail의 다음 노드를 null로 설정
        
        this.count--; // 노드 개수 감소
        return deleteNode; // 삭제된 노드 반환
    }

 

else if (index == this.count - 1) {
        let deleteNode = this.tail; // 삭제할 노드

        this.tail.prev.next = null; // 기존 tail의 이전 노드의 다음 노드를 null로 설정
        this.tail = this.tail.prev; // 기존 tail의 이전 노드를 새로운 tail로 설정
        
        this.count--; // 노드 개수 감소
        return deleteNode; // 삭제된 노드 반환
    }

위의 코드가 제가 그림을 그려가면서 생각한 로직이고 아래의 코드가 감자님이 강의에서 올려주신 코드입니다.

얼핏 생각하고 그림으로 대조해봤을 때 똑같은 기능을 하는 코드들인데 어떤 차이가 있는지 chatGPT한테 물어봤습니다.

아래의 코드의 경우는 연결리스트에 노드가 1개 존재할 때 this.tail.prev가 null이기 때문에 error가 발생할 가능성이 있다고 했었습니다. 근데 강의에서 제공된 풀 코드를 보면 이미 연결리스트에 노드가 1개인 부분은 위의 if문에서 처리되기 때문에 문제가 없는 것 같습니다.

둘 중에 어떤 코드를 쓰는 게 더 정확할지 여쭙고 싶어 질문 남깁니다. 감사합니다.

 

알고리즘

Answer 1

0

gamja5

안녕하세요 이지민님!
두 코드를 비교해보면 대체되는 tail을 먼저 지정할지, tail의 이전 노드의 next를 null로 할지의 순서 차이가 있네요.
이 두 순서가 바뀌더라도 결과에는 차이가 없습니다.
말씀하신 것처럼 노드가 1개인 경우는 따로 처리되기 때문입니다.

다만 코드를 보니 지민님이 작성하신 코드가 참조를 더 적게 하여 코드를 읽는 사람 입장에서 이해하기가 더 쉬울 것 같습니다.
실질적인 차이는 미미하겠지만, 참조 횟수가 1회 적어 메모리 접근 시간도 더 짧습니다.
따라서 지민님이 작성하신 코드를 사용하는 것이 더 좋아 보입니다.

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

1

dlwlals1207

특히 연결리스트 구현 부분은 prev,current,next를 여기저기서 쓰기 때문에 제일 처음에 전공과목에서 배웠을 때는 그리면서 해도 이해가 되지 않았었는데 감자님이 항상 달아주시는 그림이랑 제가 직접 종이에 그리면서 그리는 그림과 비교/대조하면서 코드를 분석하니까 코드의 순서가 중요한 경우나 노드 자체와 연결리스트를 각각 분리해서 만들었을 때 왜 코드의 재사용성이나 수정이 용이한 지 등을 고민하면서 더 깊게 이해하게 되는 것 같습니다.

도움 주셔서 정말 감사합니다!

큐의 마지막 데이터가 head에 위치해야 하는 이유가 궁금합니다.

0

71

2

이중연결 리스트 데이터 삭제시 질문이 있습니다.

1

61

2

자바스크립트 배열은 동적이 아닌가요?

1

85

2

자바스크립트 배열

0

75

2

코테에서 링크리스트 자료구조를 사용해야 하면, 이번 강의에서 구현한 메서드들도 모두 직접 구현하면 되나요?/

0

150

2

공부 방식 질문 드립니다.

1

115

2

메모이제이션과 타뷸레이션 관련해서 질문드립니다.

1

166

2

병합정렬에서 질문이 있습니다.

2

141

1

병합정렬 질문 있습니다.

1

136

5

데이터 삽입, 삭제 함수 오류 범위 설정

0

156

2

해시 테이블에서 질문이 잇습니다.

2

127

2

시간복잡도 계산 시 1회 연산당 연산량은 왜 고려하지 않는 건가요?

1

147

2

터미널 설정

0

113

2

2:13분 관련 질문입니다

0

89

1

8:47초경부터 9:00초까지 질문입니다.

1

133

2

2:36초 head 위치가?

1

109

2

환경구축강의 중 터미널 파일 실행오류

0

160

2

4:58 이중for문 질문있습니다.

0

103

1

hanoi함수 처음 호출에 대해서 여쭤봅니다.

1

129

2

해쉬테이블 데이터 관련해서 질문있습니다.

0

147

2

자바스크립트 Map과 어떤 차이가 있나요??

0

202

2

질문이있습니다.

0

102

1

2번째 복습 스터디📖 를 진행하고 스터디원분들과 나눈 질문들 입니다.(자료구조와 알고리즘)

1

146

2

3:54 질문 clear() 함수

1

78

1