강의

멘토링

로드맵

Inflearn brand logo image

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

박혁진님의 프로필 이미지
박혁진

작성한 질문수

김영한의 실전 자바 - 중급 2편

직접 구현하는 연결 리스트3 - 추가와 삭제2

직접 구현하는 연결리스트 3 - 추가 부분 질문있습니다

작성

·

28

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

image.png

강의 보기 전에 미리 만들어 본 코드입니다.

3번째 줄에서 afterNode를 안 만들고 주석처리한 코드를 afterNode 자리에 넣으니

image.png

오류가 발생하네요

그리고

image.png

수업중 코드에서도 2번째줄 코드 위치만 바껴도 위와 똑같은 오류가 발생하네요

왜그런걸까요?

 

 

답변 3

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 박혁진님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

실제 동작하는 전체 프로젝트를ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요


추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명 (오류 화면, 오류 로그 포함)

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

박혁진님의 프로필 이미지
박혁진
질문자

1.제가 미리 만들어본 코드는 말씀하신대로 노드간 연결 순서랑은 관계없어 보입니다.

마지막줄에서 afterNode 대신 주석처리한걸 썼을 때 오류가 왜 발생했는지 답변으론 이해가 잘 안되네요


2. 앞에서 말한 노드간 연결 순서로 보면 강의에서 나온 코드가 prev.next = newNode; 다음에 newNode.next = prev.next; 이게 맞는것 같은데 이때도 1번과 동일한 오류가 발생하네요

0

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

박혁진님께서 제시하신 질문은 연결 리스트를 구현할 때 노드를 추가하는 과정에서 발생하는 문제에 대한 것이군요. 연결 리스트에서 노드를 추가할 때 올바른 순서로 포인터를 설정하지 않으면, 종종 무한루프나 메모리 오류와 같은 문제가 발생할 수 있습니다.

아래에서 문제의 근본 원인과 해결 방법을 설명드리겠습니다:

  1. 노드 연결 순서:

    • 새 노드를 기존 리스트에 중간에 삽입할 때, beforeNodenewNode, 그리고 afterNode의 연결 순서가 중요합니다. beforeNode의 다음 노드를 newNode로 설정한 후, newNode의 다음 노드를 afterNode로 설정하는 것이 일반적인 순서입니다.
    • 만약 이 순서가 어긋나게 되면 같은 노드가 반복적으로 참조되거나, 잘못된 참조로 인해 무한 루프가 발생해서 스택 오버플로우나 메모리 초과 오류가 발생할 수 있습니다.
  2. 코드에서의 오류 발생:

    • 코드 이미지에서 노드 연결 순서가 잘못되어 있을 경우 OutOfMemoryError가 발생할 수 있습니다. 이는 특히 toString 메서드에서 리스트를 출력할 때 무한 루프가 발생하기 때문에 일어날 수 있습니다. 리스트의 끝이 없기 때문에 문자열을 계속해서 생성하려고 시도하면서 메모리가 초과됩니다.
  3. 해결책:

    • 노드의 연결 순서를 올바르게 설정하십시오:
      • beforeNode.next = newNode;
      • newNode.next = afterNode;
    • 위의 순서를 유지할 경우, beforeNodenewNode를 가리키고, newNodeafterNode를 가리키게 되어 정상적으로 연결이 완료됩니다.

관련된 문제를 다루는 유사한 질문과 답변을 확인하실 수 있는 링크를 제공해 드릴게요:

이미지 속 코드들도 참고하면서 노드의 연결 순서를 바르게 잡는 시도를 해보시면 좋을 것 같습니다.

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

박혁진님의 프로필 이미지
박혁진

작성한 질문수

질문하기