28:40
prev->next = curr->next;
이 코드줄 이후로 prev 노드 리스트가 4->2->1로 변경되서 3이 빠진건 이해 됬는데
curr->next = head;
여기서 head가 가리키고 있는 노드 리스트가 왜 3이 빠진걸까요?
저는 curr->next = head; 실행 이후 시점에서 아래처럼 해석해서 답이 354321 나왔습니다 ㅠ.
prev 노드 리스트: 4->2->1
curr 노드 리스트: 3->5->4->3->2->1
prev,curr,head 포인터들이 모두 다른 구조체 리스트를 가리키고 있다고 생각하면서 풀었는데 이게 잘못된걸까요..?
Answer 2
0
안녕하세요, head가 직접 3을 가리키는 것이 아니라 줄줄이 가리키고 있었는데
중간에 있던 부분을 생략하고 3이 가리키고 있던 것을 이전 노드가 가리키라고 변경했기 때문에 그렇습니다.
한글로는 조금 어려워서 그림을 그려보자면
head -> 5
5 -> 4
4 -> 3
3 -> 2
prev->next = curr->next; 이렇게 하면
4 -> 3이 끊기고 4 -> 2가 됩니다.
말씀하신 대로 이 때 3이 끊긴 것이고요.
그 다음 질문 주신 curr -> next = head;는
이 시점에서 curr은 3, head 5이기 때문에
3의 next = 5가 되어서
3 -> 5 -> 4 -> 2 -> 1 요렇게 됩니다.
3이 빠진 것은 그 위에서 3을 가리키고 있는 것을 빼고, 그 다음 것을 가리키라고 변경했기 때문입니다.
0
안녕하세요, 인프런 AI 인턴입니다. polaris2024님.
질문하신 내용은 링크드 리스트에서의 노드 재배치와 포인터 조작에 관련된 사항으로 보입니다. 이 문제는 포인터들을 잘 이해하고, 리스트 조작의 과정에서의 포인터 재배열을 명확히 이해해야 합니다.
설명
prev->next = curr->next;이 코드 줄은curr노드를 리스트에서 제거하는 역할을 합니다. 4에서 3을 건너뛰고 2로 바로 연결합니다.curr->next = head;이 줄은 리스트의 맨 앞에curr노드를 추가하는 것입니다. 즉,curr노드(여기서는 3) 다음에head노드를 설정하여 리스트의 가장 앞에curr노드를 두는 것입니다.
이 과정에서의 핵심은 curr->next = head; 가 실행된 이후 curr 노드가 현재 head의 위치에 앞서게 되어 head를 포함한 전체 리스트의 맨 앞에 삽입된다는 것입니다.
그래서 최종 리스트는 먼저 curr인 노드가 머리로 오고, 그 뒤에 이전의 head 노드부터 나머지 노드들이 차례로 이어지게 됩니다.
포인터 이해의 핵심
prev,curr,head는 모두 동일한 리스트 내의 노드들입니다. 각각 다른 리스트를 가리키고 있지 않습니다.
curr가 리스트의 맨 앞으로 이동하고,head가curr의 다음을 가리키게 되는 점이 중요합니다.
기존에 유사한 질문들이 있습니다. 다음 링크들을 통해 추가적인 설명을 참고하시면 이해에 더 좋을 것 같습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
9강 26:23
0
12
1
9강 23:46
0
8
0
코드 중간에 . 붙은건 뭐라고 봐야할까요?
0
20
2
설명중 단어 의미 해석 문제.
0
14
1
수강 섹션마다 옆에 자료 다운로드 버튼이 있는데. 다운받으면 무슨내용이 있는건가요?
0
9
1
SQL 집중학습
0
21
1
NULL과 0
0
19
2
26년 1회 기출문제 11번 질문드립니다
0
23
1
업캐스팅 문제예시5 & 업캐스팅 문제 예시 6
0
27
1
V1.2 VS V.091
0
35
2
split('T')일때는 T만 제거되는거고 공백은 제거되지 않는 건가요?
0
39
2
파이썬 언어 업데이트, 언어별 학습자료 업데이트
0
43
2
C, java, python 언어 기출문제 강의 질문
0
37
2
1:26 에서 반복문 i[1] 이니까 0 다음 두번째 항목들 아닌가요
0
39
2
d
0
39
2
출력값
0
37
2
(기출) 2023년 3회 코드해석 문제의 1:10입니다.
0
42
2
23년도 2회 c언어 0:03 n[(i+6)%5] 도 가능한건가요?
0
45
2
정처기 질문
0
49
2
자식 기본 생성자 출력 조건
0
39
2
부모 및 자식 기본생성자 호출
0
43
2
포인터 16강 9:44
0
32
1
6강 17:50
0
52
2
6강 11:37
0
48
2

