본문 바로가기
해피 코딩/Algorithm

[Day 4] Linked List 데이터의 삭제

by happy-coding 2026. 1. 16.
📝 2025 C언어 특강 내용 기록

😼 Github : https://github.com/mad-cost/C-structures-basics

 

Day 3에서는 LinkedList의 데이터 입력과 출력에 대해 알아보았다.
마지막으로 Day 4에서는 LinkedList의 삭제 를 정리해보려고 한다.


🔗  LinkedList 삭제 그림으로 이해하기

아래와 같이 노드들이 연결되어 있을 때,

 

사용자로부터 삭제할 데이터 3 을 입력받았다면,
LinkedList에서는 data가 3인 노드만 깔끔하게 제거해야 한다.

그 과정을 하나씩 살펴보자.

📌 LinkedList 삭제의 핵심 포인트는
노드를 지우는 것이 아니라,
끊어진 연결 관계를 다시 자연스럽게 이어주는 것❗

1️⃣ head에 다음 노드와 연결된 노드가 있는지 검사

해당 작업이 LinkedList 삭제의 출발점이다.

 

❌ head와 연결된 다음 노드가 없는 경우

head is null

을 출력하고  더 이상 진행하지 않는다.

 

head와 연결된 다음 노드가 있는 경우

삭제를 위해서는 2개의 포인터가 필요하다.

 

🔎 prev : 이전 노드

  • 삭제할 노드의 바로 앞 노드
  • 처음에는 기준점이 없으므로 head부터 시작

🔎 temp : 검사할 노드

  • 삭제를 위해 입력받은 data와 비교할 노드
  • head와 연결된 다음 노드부터 검사 시작

즉, 처음 상태는 이렇게 된다.


2️⃣ 삭제할 값 찾기

본격적으로 탐색이 시작되는 부분이다.

while (temp != NULL && temp->data != deleteNum)
{
  prev = temp;
  temp = temp->nextAdd;
}
  • 코드 해석
    • temp가 NULL이 아닐 때까지
    • 그리고 temp의 data가 삭제할 값이 아닐 때까지
    • 계속 앞으로 이동!

📌 여기서 포인트는

  • prev는 temp 를 따라다니는 그림자
  • temp가 이동하면 prev도 같이 이동

👀 prev/temp 노드 이동  한눈에 보기

사용자로부터 입력받은 삭제할 데이터 3을 탐색하는 과정 

📌page 5에서 temp노드의 data 값이 3인 것을 볼 수 있다 

4️⃣ 연결 끊고, 메모리 정리

temp가 가리키는 노드의 data가
삭제할 데이터 3과 같다면,

 

temp의 다음 노드 주소
prev의 다음 노드 주소로 연결해준다.

 

즉,
이전 노드(prev)가 삭제할 노드(temp)를 건너뛰고
바로 다음 노드를 가리키게 만든다.

 

🧹 메모리 정리

연결까지 끝났다면
이제 삭제된 노드는 더 이상 필요 없다.

  • temp가 위치한 노드를
  • free()를 사용해 동적 할당 해제

메모리까지 깔끔하게 정리해준다. ✨

이렇게 하면 LinkedList
아무 일도 없었던 것처럼
자연스럽게 다시 이어진다. 😄


📚 다음 시간까지 

중위 표현식을 후위 표현식으로 변환하는 방법 공부하기


📝 마무리하며

삭제를 끝으로 LinkedList 파트가 잘 마무리되었고,

 

완성된 LinkedList는
실제 세미나에서 발표한다는 느낌으로 PPT로 정리해보았고,
이에 대해 교수님께서 여러 가지 피드백을 주셨다.

 

아직은 세미나에서 발표하기에
PPT의 기술적인 구성이나 완성도가 충분하다고 보기는 어려워,
조금 더 다듬을 시간이 필요해 보인다.

 

이로써 Day 4가 마무리 되었다 😄