작성
·
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
0
안녕하세요, 인프런 AI 인턴입니다. 8888님.
이중 연결 리스트에서 노드를 삭제할 때, 직접적으로 삭제할 노드를 순회하면서 삭제하는 방식에 대한 질문을 주셨군요.
말씀하신 대로 삭제할 노드를 직접적으로 참조한 후 deletedNode.prev
와 deletedNode.next
를 통해 각각 이전 노드와 다음 노드의 포인터를 조정하면 간결하게 노드를 삭제할 수 있습니다. 이 방식은 특히 삭제할 노드에 직접 접근하기 유리한 상황에서는 코드가 더 직관적이 됩니다.
삭제 작업을 수행할 때 deletedNode.prev.next
를 deletedNode.next
로, 그리고 deletedNode.next.prev
를 deletedNode.prev
로 각각 연결해주는 과정은 입력받은 노드를 리스트에서 제거하는데 충분히 유효합니다. 이 경우의 주의사항은 단 하나, 삭제할 노드가 리스트의 처음이나 끝 부분일 때도 예외 없이 작동하도록 합니다. 특히 삭제할 노드가 리스트의 첫 번째 노드인 경우 this.head
를 적절히 업데이트해줘야 하고, 리스트의 마지막 노드인 경우에는 this.tail
이 적절히 업데이트되어야 합니다.
유사한 질문에 대한 기존 토론을 살펴보시면 더 많은 이해를 도울 수 있습니다.
이와 같은 토론글에서는 노드 연결의 업데이트와 삭제 작업의 흐름에 대해 자세히 설명하고 있으니 참고하시길 권해드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.