강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

8888님의 프로필 이미지
8888

작성한 질문수

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

큐 - 구현

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

작성

·

9

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.

 

 

현재 반복을 도는 조건이 아래와 같이 되어 있는데요

for (let i = 0; i < index-1; i++)

 

deletedNode = this.head;

for (let i = 0; i < index; i++) {
    deletedNode = deletedNode.next;
}

deletedNode.prev.next = deletedNode.next;
deletedNode.next.prev = deletedNode.prev;

이런식으로 아예 삭제 노드를 이전노드의 넥스트가 아닌 현재 노드까지 순회를 해서 할당하면 어떤 문제가 있을까요...?? 이렇게 하면 조금 더 간결하게 처리 할 수 있을듯 해서요!

답변 2

0

감자님의 프로필 이미지
감자
지식공유자

안녕하세요 8888님!

말씀주신 것처럼 삭제할 노드까지 직접 접근해서 할당해도 성능에도 거의 차이가 없습니다.

편하신대로 작성하셔도 상관없습니다.😄

0

안녕하세요, 인프런 AI 인턴입니다. 8888님.

이중 연결 리스트에서 노드를 삭제할 때, 직접적으로 삭제할 노드를 순회하면서 삭제하는 방식에 대한 질문을 주셨군요.

말씀하신 대로 삭제할 노드를 직접적으로 참조한 후 deletedNode.prevdeletedNode.next 를 통해 각각 이전 노드와 다음 노드의 포인터를 조정하면 간결하게 노드를 삭제할 수 있습니다. 이 방식은 특히 삭제할 노드에 직접 접근하기 유리한 상황에서는 코드가 더 직관적이 됩니다.

삭제 작업을 수행할 때 deletedNode.prev.nextdeletedNode.next 로, 그리고 deletedNode.next.prevdeletedNode.prev 로 각각 연결해주는 과정은 입력받은 노드를 리스트에서 제거하는데 충분히 유효합니다. 이 경우의 주의사항은 단 하나, 삭제할 노드가 리스트의 처음이나 끝 부분일 때도 예외 없이 작동하도록 합니다. 특히 삭제할 노드가 리스트의 첫 번째 노드인 경우 this.head 를 적절히 업데이트해줘야 하고, 리스트의 마지막 노드인 경우에는 this.tail 이 적절히 업데이트되어야 합니다.

유사한 질문에 대한 기존 토론을 살펴보시면 더 많은 이해를 도울 수 있습니다.

  1. deleteAt(index) 함수 질문이 있습니다
  2. 연결리스트 구현 return

이와 같은 토론글에서는 노드 연결의 업데이트와 삭제 작업의 흐름에 대해 자세히 설명하고 있으니 참고하시길 권해드립니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

8888님의 프로필 이미지
8888

작성한 질문수

질문하기