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

lyy님의 프로필 이미지
lyy

작성한 질문수

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

연결리스트 - 구현

deleteAt() 질문

해결된 질문

작성

·

141

·

수정됨

1

// 변경 전
for (let i=0; i < index - 1; i++) {
    currentNode = currentNode.next;
}

let deleteNode = currentNode.next;
currentNode.next = currentNode.next.next;

// 변경 후
for (let i=0; i < index; i++) {
    currentNode = currentNode.next;
}

let deleteNode = currentNode;
currentNode = currentNode.next;

deleteAt()의 나머지 노드에서 삭제 구현 코드에서 '변경 후'와 같은 코드는 제대로 삭제되지 않는 이유가 무엇인가요? 똑같이 동작할거라 생각하고 임의로 변형해봤는데 값에 변화가 없네요.

변경 전의 currentNode.next.next 와 변경 후의 currentNode.next 둘 다 값이 없어 참조하지 않는 건 똑같은데..

currentNode.next를 참조할 값이 없게 하는거랑

currentNode를 참조할 값이 없게 하는거랑 다르게 처리되는건가요?

아니면 아예 다른 포인트에서 틀린건지.. 궁금합니다

 

답변 2

1

lyy님의 프로필 이미지
lyy
질문자

답변을 토대로 currentNode의 값을 변경하는 것은 그냥 변수에 값을 저장하는 일시적인 행위이고

currentNode.next 의 값을 변경해야 실제로 다음 연결을 변경해주는 것이기 때문에 구조에 변화가 일어나는 거라고 이해했습니다. 감사합니다

 

1

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

lyy님의 질문에 대한 답변으로, 여러분의 이해를 돕기 위해 연결리스트에서 deleteAt(index) 함수의 작동 원리와 관련된 기존 답변을 참고 자료로 제공드립니다.

질문에서 언급된 “변경 전” 코드는 연결 리스트에서 특정 인덱스의 노드를 삭제하는 기존 방식을 나타냅니다. 이 방법은 currentNode를 삭제될 노드의 이전 노드까지 이동시키고, currentNode.next를 다음 다음 노드(currentNode.next.next)로 재지정하여 삭제될 노드와의 연결을 끊습니다.

반면에 “변경 후”의 접근 방식은 예상과 다른 결과를 초래하는데, 이는 currentNode = currentNode.next;라는 코드 줄 때문입니다. 이 줄은 단순히 currentNode 변수가 다른 노드를 가리키도록 변경하지만, 실제 연결 리스트의 구조를 변경하지 않습니다. 따라서 삭제하고자 하는 노드와의 연결이 끊어지지 않게 됩니다.

이와 관련된 기존의 질문과 답변은 다음과 같습니다:

  • 연결리스트 관련 질문 - 이 게시글에서는 currentNode 변수가 연결 리스트 내에서 어떻게 이동하는지에 대해 설명하고 있습니다. currentNode = currentNode.next; 구문의 동작 원리에 대해 자세하게 설명하고 있어, 연결리스트의 개념과 동작 방식에 대한 이해를 돕습니다.

답변에서 언급된 “변경 전” 코드의 동작 방식을 이해하면, “변경 후” 코드가 원하는 대로 동작하지 않는 이유를 더 명확하게 파악할 수 있습니다. 핵심은 노드의 연결을 끊는 것이 아니라 단순히 변수가 다른 노드를 가리키도록 만드는 것에 있습니다.

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

lyy님의 프로필 이미지
lyy

작성한 질문수

질문하기