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

ooo1274님의 프로필 이미지
ooo1274

작성한 질문수

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

연결리스트 - 구현

insertAt() 관련

해결된 질문

작성

·

258

1

맨 앞에 데이터를 삽입하는 경우에

newNode.next = this.head;

this.head = newNode;

이 부분에서

새로운 노드의 next를 기존의 head와 연결하고

head를 newNode로 바꾸면

newNode의 next가 자기자신을 가리키는거라고 생각되는데 어떻게 이해하면 좋을까요?

답변 1

2

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

지금 제가 생각하는 ooo1274님이 착각할 수 있는 상황은 두 가지인 것 같습니다.

첫 번째는 연결리스트에 데이터가 0개일 때 삽입하는 경우로 생각하면 그렇게 생각할 수 있습니다.
연결리스트가 비어있다고 가정하고 그렇게 생각하셨다면 틀리지 않는 생각입니다.
이 경우엔 연결리스트에 데이터가 1개 이상있다고 가정하고 생각해보시면 다른 결과를 확인할 수 있을겁니다.

첫 번째 경우에 해당하지 않으시다면 변수가 가리키는 개념에서 약간 혼란이 있으신 것 같습니다.
데이터 "2"를 담고있는 노드를 this.head변수가 가리키고 있었다고 가정해보겠습니다.
이제부터 데이터 "2"를 담고 있는 노드는 편하게 노드2 라고 말하겠습니다.
그리고 newNode.next = this.head를 한다면 newNode.next는 this.head가 가리키고 있는 노드2를 가리킵니다.
여기서 중요한 것은 newNode.next와 this.head는 각각 노드2를 가리킨다는 것입니다.
newNode.next와 this.head는 서로 영향을 주는 관계는 아닙니다.
만약 노드2에 있는 데이터가 3으로 수정되었다면 newNode.next와 this.head를 찍어보면 3을 확인할 수 있을겁니다.
이 상태에서 this.head = newNode로 바꾼다면 this.head가 가리키는 곳이 노드2에서 newNode로만 바뀐것 입니다. newNode.next는 여전히 노드2를 가리키고 있는 겁니다.
이 개념이 조금 헷갈릴 수도 있는데 이 글을 참조하시면 정리하는데 편하실 것 같습니다.

두 가지 상황을 가정하고 설명했는데 어떤것이 문제였는지는 잘 모르겠네요 ㅎㅎ
혹시 위 상황에 해당하지 않는다면 다시 말씀해주시면 열심히 답변드리겠습니다!

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

제가 궁금했던 것은 말씀해주신 것 중에 두 번째 상황이었습니다.

답변 읽고 제가 궁금했던 것이 잘 이해 되었습니다. 친절한 답변 감사합니다!!

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

😊
image

ooo1274님의 프로필 이미지
ooo1274

작성한 질문수

질문하기