정처기 감자정처기 감자
C언어자료구조

검색

검색어를 입력해 개념, 문제, 필기를 찾습니다.

C언어 연결 리스트 (Linked List)

코딩C언어
읽는데 8분 소요
처음 쓰인 날: 2026-02-03
마지막 수정일: 2026-05-06
조회수: —
선수학습(2개)
  • C언어 구조체 포인터
  • C언어 동적 메모리 할당 (malloc, free)

요약

C언어 연결 리스트의 기본 개념과 순회 방법을 알아봅니다. 정보처리기사 실기에 자주 출제되는 연결 리스트 순회 문제를 풀기 위한 핵심 개념을 정리합니다.

연결 리스트 핵심 정리

개념설명예시
노드(Node)데이터와 다음 노드 주소를 가진 구조체struct Node { int x; struct Node* next; };
NULL리스트의 끝을 표시next = NULL 또는 next = 0
순회(Traversal)리스트의 모든 노드를 방문while (curr) { curr = curr->next; }
연쇄 접근포인터를 따라 여러 노드를 거쳐 접근head->next->data
뒤집기(Reverse)next 방향만 거꾸로 돌려 순서 반전prev/curr/next 3포인터 → 상세

연결 리스트란?

연결 리스트 (Linked List)는 각 요소(노드)가 데이터와 다음 노드의 주소를 함께 저장하는 자료구조입니다.

배열과 달리 메모리에 연속적으로 저장되지 않고, 포인터로 연결됩니다. 연결 리스트는 구조체와 포인터를 함께 사용하므로, 아직 익숙하지 않다면 해당 페이지를 먼저 읽고 돌아오세요.

c
코드 하이라이팅 중…

struct Node* next는 같은 타입(struct Node)의 다른 노드를 가리키는 포인터입니다. 이처럼 자기 자신과 같은 타입의 포인터를 멤버로 가지는 것을 자기참조 구조체라고 합니다. 이 포인터를 통해 노드끼리 서로 연결됩니다.

`5u`, `7u`, `11u`에서 `u`는 무엇인가요?
unsigned int (부호 없는 정수)를 의미합니다. 숫자 뒤에 u를 붙이면 부호 없는 정수로 처리됩니다.
연결 리스트 개념
t3에서 시작해서 next 포인터를 따라 t2, t1 순서로 연결됩니다. t1의 next는 NULL(널)이므로 리스트의 끝입니다.

노드를 먼저 생성하고 나중에 연결하는 방식도 있습니다. 실기 문제에서 자주 출제되는 형태입니다.

c
코드 하이라이팅 중…

&는 주소 연산자로, &t2는 t2의 메모리 주소를 의미합니다. t3.next = &t2는 t3의 next에 t2의 주소를 저장하여 두 노드를 연결합니다.

노드 생성 후 연결 과정
Step 1: 각 노드가 독립적으로 존재하는 초기 상태. Step 2: 포인터 연결 후 완성된 연결 리스트.

연결 리스트 순회

순회 (Traversal)는 리스트의 모든 노드를 처음부터 끝까지 방문하는 것입니다.

위에서 만든 연결 리스트를 순회하면서 각 노드의 데이터를 출력해봅시다.

c
코드 하이라이팅 중…

아래 코드에서 curr->x의 -> (화살표 연산자)는 포인터가 가리키는 구조체의 멤버에 접근하는 연산자입니다. curr->x는 "curr이 가리키는 노드의 x 값"을 의미합니다.

c
코드 하이라이팅 중…

실행 과정:

반복currcurr->xcurr->next출력
1회&t311&t211
2회&t27&t17
3회&t15NULL5
종료NULL---

최종 출력: 11 7 5

연결 리스트 순회
curr 포인터가 t3에서 시작해서 next를 따라 t2, t1 순서로 이동합니다.

while(curr)의 의미

while문은 조건이 참인 동안 계속 반복합니다. curr이 유효한 주소를 가리키면 참이므로 반복을 계속하고, curr이 NULL이 되면 거짓이므로 반복을 멈춥니다.

구조체 초기화에서 struct Node t1 = { 0, 5u };처럼 next에 0을 넣으면 NULL 포인터를 의미합니다. 이 노드가 리스트의 마지막 노드가 되어 순회가 여기서 끝납니다.

while(curr)은 while(curr != NULL)과 같은 의미입니다
C언어에서 포인터 값 0은 NULL과 같습니다. while 조건에 포인터를 넣으면 NULL이 아닌 동안 참으로 평가됩니다. 시험에서 while(p), while(curr) 같은 표현이 나오면 NULL 검사로 이해하세요.

연쇄 화살표 연산자 접근

연결 리스트에서 화살표 연산자(->)를 연속으로 사용하여 여러 노드를 거쳐 데이터에 접근할 수 있습니다.

c
코드 하이라이팅 중…
위 코드의 구조체 멤버 순서에 주의하세요
이 코드의 struct node는 n1(데이터)이 먼저, n2(포인터)가 나중입니다. 앞의 struct Node는 next(포인터)가 먼저, x(데이터)가 나중이었습니다. 구조체 초기화 시 멤버 순서대로 값이 대응되므로, 초기화 순서를 헷갈리지 않도록 구조체 정의를 꼭 확인하세요.

head->n2->n1의 의미

head->n2->n1은 왼쪽에서 오른쪽으로 순서대로 해석합니다.

단계표현의미결과
1headhead 포인터&a (a의 주소)
2head->n2head가 가리키는 노드(a)의 n2&b (b의 주소)
3head->n2->n1그 노드(b)의 n120
c
코드 하이라이팅 중…
연쇄 화살표 연산자 접근
head에서 시작해서 n2 포인터를 따라 b에 도착하고, b의 n1 값(20)을 출력합니다.

다양한 접근 예시

c
코드 하이라이팅 중…

단계별로 풀어서 해석하기

연쇄 화살표 표현이 길어지면, 각 단계를 하나씩 풀어서 해석하면 실수를 줄일 수 있습니다.

c
코드 하이라이팅 중…

->가 3단 이상 연결되어도 같은 방식으로 왼쪽부터 한 단계씩 풀어가면 됩니다.

c
코드 하이라이팅 중…

(&변수)->멤버가 변수.멤버와 같아지는 이유는, &변수가 해당 변수의 주소이고, -> 연산자가 그 주소에 있는 구조체의 멤버에 접근하기 때문입니다. 결국 같은 구조체의 같은 멤버를 가리키므로 결과가 동일합니다.


한 단계 더: 연결 리스트 뒤집기

순회까지 익혔다면 다음은 노드 순서를 거꾸로 바꾸는 in-place 알고리즘입니다. 새 노드를 만들지 않고 prev/curr/next 3포인터로 각 노드의 next 방향만 뒤집어 같은 메모리에서 리스트를 반대로 만듭니다.

단계별 다이어그램과 변수 추적은 연결 리스트 뒤집기 페이지에서 다룹니다.


정보처리기사 실기 대비 문제

문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
문제를 불러오는 중이에요.
메가커피와 함께, 홈페이지 개선에 참여하세요! ☕
혹시 이용에 불편한 점이나 개선이 필요한 부분을 발견하셨나요? 댓글로 알려주시면 더 나은 감자가 될 수 있어요! 🥔 제보해주신 모든 분께 메가커피 기프티콘을 드립니다! (본인 이메일로 댓글 달아주셔야해요~)
후수학습(1개)
  • C언어 연결 리스트 뒤집기 (Reverse Linked List)

관련 글

(41개)
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어41개
제목태그업데이트시험
C언어 형변환 (Casting)
C언어코딩C언어
2026-05-15-
C언어 연결 리스트 뒤집기 (Reverse Linked List)
C언어코딩C언어
2026-05-06-
C언어 사용자 정의 함수 기초
C언어코딩C언어
2026-05-06-
C언어 sizeof 연산자
C언어코딩C언어
2026-05-06-
C언어 이진 트리 (Binary Tree)
C언어코딩C언어
2026-04-24-
C언어 중첩 구조체와 포인터 접근
C언어코딩C언어
2026-04-24-
C언어 함수 포인터 (Function Pointer)
C언어코딩C언어
2026-04-24-
배열 C언어 코딩 감자시험
감자시험C언어배열감자시험
2026-03-28응시
C언어 왕감자 정보처리기사 실기 모의 시험
C언어C언어
2026-03-27응시
제어문/반복문 C언어 코딩 감자시험
감자시험C언어제어문반복문
2026-03-28응시
연산자 C언어 코딩 감자시험
감자시험C언어연산자감자시험
2026-03-28응시
포인터 C언어 코딩 감자시험
감자시험C언어포인터감자시험
2026-03-28응시
문자열 C언어 코딩 감자시험
감자시험C언어문자열감자시험
2026-03-28응시
구조체 C언어 코딩 감자시험
감자시험C언어구조체감자시험
2026-03-28응시
C언어 구조체 배열
C언어코딩C언어
2026-03-21-
C언어 구조체 포인터
C언어코딩C언어
2026-04-24-
C언어 함수 프로토타입
C언어코딩C언어
2026-03-21-
C언어 입력 함수 - scanf, getchar, gets
C언어코딩C언어
2026-03-21-
C언어 출력 함수 - putchar, printf, puts
C언어코딩C언어
2026-09-29-
C언어 문자열 포인터 (char *)
C언어코딩C언어
2026-03-21-
C언어 포인터 산술 (Pointer Arithmetic)
C언어코딩C언어
2026-03-21-
C언어 재귀함수 (Recursion)
C언어코딩C언어
2026-03-21-
C언어 선택정렬 (Selection Sort)
C언어코딩C언어
2026-02-10-
C언어 스택 (Stack) - LIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 2차원 배열
C언어코딩C언어
2026-03-21-
C언어 원형 큐 (Circular Queue)
C언어코딩C언어
2026-03-21-
C언어 ctype.h 문자 판별 함수
C언어코딩C언어
2026-03-21-
C언어 자료형
C언어코딩C언어
2026-05-15-
C언어 이중 포인터 (Double Pointer)
C언어코딩C언어
2026-03-21-
C언어 동적 메모리 할당 (malloc, free)
C언어코딩C언어
2026-05-04-
C언어 헤더 파일과 #include
C언어코딩C언어
2026-03-21-
C언어 포인터 배열과 2차원 배열
C언어코딩C언어
2026-03-24-
C언어 포인터의 기초
C언어코딩C언어
2026-06-25-
C언어 큐 (Queue) - FIFO 자료구조
C언어코딩C언어
2026-03-21-
C언어 static 변수 - 값이 유지되는 변수
C언어코딩C언어
2026-03-21-
C언어 포인터를 이용한 문자열 복사
C언어코딩C언어
2026-07-09-
C언어 문자열 뒤집기 (포인터 활용)
C언어코딩C언어
2026-03-21-
C언어 구조체
C언어코딩C언어
2026-03-20-
C언어 삼항 연산자
C언어코딩C언어
2026-03-21-
C언어 typedef - 자료형에 새 이름 붙이기
C언어코딩C언어
2026-03-21-
전설의 완전수 문제 - C언어
C언어코딩C언어
2025-09-12-
정처기 감자정처기 감자

정보처리기사 합격
도와줄라고 하는 감자

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매

실기 이론

  • 이론 공부법
  • DB
  • 네트워크/OS
  • SW 설계
  • SW 개발
  • 보안/신기술

시험 응시

  • 시험장 찾기
  • 원서 접수
  • 응시자격 서류

요약 PDF

  • 26년 3회 이론 압축
  • 26년 3회 코딩 압축
  • 초압축 25년 3회
  • 압축 25년 3회

기출문제

  • 전체 기출문제
  • 25년 3회
  • 25년 2회
  • 문제 포럼

감자 이용권

  • 이용권 구매
© 2025 재현기획개발. All rights reserved.
  • 정처기 감자의 시작
  • 업데이트 로그
  • 개인정보 처리방침
  • 이용약관
상호명 : 재현기획개발 / 주소: 서울특별시 영등포구 영등포로 150, 지하1층 108호 L145 가라지(당산동1가, 생각공장 당산) / 대표: 김재현 / 전화: 010-8158-7127 / 통신판매업신고: 제2025-서울영등포-1569호 / 이메일: contact@edugamja.com / 사업자등록번호: 573-51-00999