• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

링크드 리스트 질문 드립니다.

21.07.19 22:26 작성 조회수 109

0

while (search != NULL) search = search->next; search = new_node; new_node->next = NULL;
이 코드에서 search가 링크드 리스트의 마지막 노드의 next 주소를 가지고 있는거 아닌가요? 그래서 new_node의 주소를 대입하는 것과

while (search->next != NULL) search = search->next; search->next = new_node; new_node->next = NULL;

이코드에서 search가 마지막 노드의 주소를 가지고 있고, 그래서 next에 new_node의 주소를 넘겨주는 것과 무슨 차이가 있는지 모르겠습니다. 아래코드는 정상 작동하고 위에 코드가 작동하지 않습니다.

답변 1

답변을 작성해보세요.

0

안녕하세요? 질문을 해당 강의에서 하신 것은 아니시지만 워낙 질문이 적은 강의이고 구체적인 답변을 드릴 상황은 아니라서 대략 설명 드리겠습니다.

 traversal을 할 때 대부분의 경우 두 가지의 while 경우에 대해서 모두 구현을 하실 수 있습니다.다만 현 시점에서 고래님께서 생각하셔야할 점은 왜 작동해야할 것 같은데 작동하지 않는가?를 해결하셔야 합니다. 일단 이런 의문을 갖고 시작하신 것은 좋은 접근방법입니다.

자료구조 공부는 제가 각 경우에 대해서 설명드리는 것은 별로 도움이 되지 않습니다. 만약 그랬다면 while 문 안에서는 ~~하게만 써야해요라고 강의에서 설명을 드렸을 겁니다. 그보다는 왜 내 생각과 실제 결과가 다른지를 끈질기게 추적해서 원인을 찾아내셔야 합니다. 한 두 번만 그런 과정을 거치시면 이후에는 자신감이 급상승할겁니다.

방법은 의외로 간단합니다. search, new_node, new_node->next 등 필요한 주소들을 전부 출력해서 왜 문제가 생기는지 이유를 찾아보는 것입니다. 조금 능숙해지시면 굳이 출력하지 않고 디버거 사용하셔도 됩니다.

다시 말씀드리지만, 기초 문법 강의 이후 자료구조 부터는 왜 내 생각대로 작동하지 않는지 확인하시는 것에 조금 더 노력을 기울이시기를 권장합니다.

다시 시도해보시고 너무 힘들면 다시 해당 강의 질문에 문의주세요.

고래님의 프로필

고래

질문자

2021.07.20

답변 감사합니다! 직접 답변해주실지 몰라서 놀랐습니다. 말씀하신데로 더 끈기있게 뭐가 문제인지 찾아보겠습니다. 감사합니다! 지금 C언어 후 부록강의를 수강하고 있는데 정말 도움이 많이 되고 있습니다. C++강의도 수강 예정입니다. 앞으로도 좋은 강의 많이 찍어주시면 감사하겠습니다.