단열 연결 리스트에서 전체 노드를 모두 삭제하는 방법을 그림을 통해서 설명해보겠다.
1. 4개의 노드 중 delNode 삭제할 첫 번째 노드를 가리킨다.
2. delNode 가 첫 번째 노드를 가리키고 있기 때문에 시작 노드를 가리키는 head 는 그 다음 값을 가리키도록 설정한다.
3. 1번 노드 삭제 후 delNode 가 2번 노드를 가리키도록 설정한다.
4. head 가 3번 노드를 가리키도록 설정한다.
5. 2번 노드를 지운 후 delNode 는 3번 노드를 가리킨다.
6. head 가 마지막 4번 노드를 가리킨다.
7. 3번 노드 삭제 후 delNode 는 마지막 4번 노드를 가리킨다.
8. head 는 그 다음 노드를 가리켜야 하는데 노드가 없으니까 아무것도 가리키지 않는 NULL 상태가 된다.
9. 4번 노드를 삭제하고 함수가 종료된다.
<코드로 구현>
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int value;
struct node* next;
} node;
node* head = NULL;
void removeNode() {
node* delNode = head; //delNode 가 첫번째 노드를 가리킴
while (head != NULL) { // head 가 가리키는 대상이 있을때까지 반복
head = head->next; // head 이동
free(delNode); //노드 삭제
delNode = head; // delNode 이동
}
}
int main() {
// 예시 코드: 연결 리스트를 생성하고 제거하는 예제
node* node1 = (node*)malloc(sizeof(node));
node* node2 = (node*)malloc(sizeof(node));
node* node3 = (node*)malloc(sizeof(node));
node* node4 = (node*)malloc(sizeof(node));
node1->value = 1;
node1->next = node2;
node2->value = 2;
node2->next = node3;
node3->value = 3;
node3->next = NULL;
node3->value = 4;
node3->next = NULL;
head = node1;
removeNode();
if (head == NULL) {
printf("연결 리스트가 성공적으로 제거되었습니다.\n");
} else {
printf("연결 리스트 제거에 실패했습니다.\n");
}
return 0;
}
'자료구조&알고리즘' 카테고리의 다른 글
[단일 연결 리스트 ] 특정 값 노드 삭제 | 중간 값 삭제 (0) | 2024.05.25 |
---|---|
[단일 연결 리스트 ] 특정 값 노드 검색 (0) | 2024.05.25 |
[단일 연결 리스트] 첫 노드 삭제 (0) | 2024.05.19 |
[단일 연결 리스트] 노드 맨 뒤 삽입 (0) | 2024.05.19 |
[단일 연결 리스트 ] 노드 순회(traversal) (0) | 2024.05.19 |