정보처리기사 실기C언어C 연결 리스트난이도 4MCQ

정보처리기사 실기 C 연결 리스트 기출문제 #3878

문제

다음 C 코드의 출력 결과로 가장 적절한 것은?

C
#include <stdio.h> #include <stdlib.h> typedef struct Data { int value; struct Data *next; } Data; Data* insert(Data* head, int value) { Data* new_node = (Data*)malloc(sizeof(Data)); new_node->value = value; new_node->next = head; return new_node; } Data* reconnect(Data* head, int value) { if (head == NULL || head->value == value) return head; Data *prev = NULL, *curr = head; while (curr != NULL && curr->value != value) { prev = curr; curr = curr->next; } if (curr != NULL && prev != NULL) { prev->next = curr->next; curr->next = head; head = curr; } return head; } int main() { Data *head = NULL, *curr; for (int i = 1; i <= 5; i++) head = insert(head, i); head = reconnect(head, 3); for (curr = head; curr != NULL; curr = curr->next) printf("%d", curr->value); return 0; }

① 35421 ② 12345 ③ 54321 ④ 34521

정답

1

해설

정답: 1. insert는 새 노드를 head 앞에 붙이므로 최초 리스트는 5→4→3→2→1이다. reconnect(head, 3)은 값 3 노드를 맨 앞으로 옮기므로 3→5→4→2→1이 된다.

오답 풀이

  • 1번: 연결 리스트 삽입 순서와 재연결 결과가 맞다.
  • 2번: 뒤에 삽입되는 방식으로 착각한 값이다.
  • 3번: reconnect 수행 전 리스트이다.
  • 4번: 4와 5의 순서를 잘못 계산한 값이다.

보충 개념 단일 연결 리스트에서 노드를 앞으로 이동하려면 이전 노드의 next를 현재 노드 다음으로 바꾸고, 현재 노드의 next를 기존 head로 연결해야 한다.

정보처리기사 실기 시험 준비 가이드

이런 문제 20~50개를 한 번에 풀어보세요

매번 새로 추가되는 모의고사 + 오답 자동 복습 + 회차별 실력 추적. 회원가입 후 무료 이용.

[정보처리기사 실기] C 연결 리스트 C언어 기출 #3878 | 문어CBT