Delete - 노드 삭제하기
delete_node : 인덱스 값과 삭제할 노드의 개수를 입력하여 해당 노드를 삭제함.
<Linked.h>
#include <stdlib.h>
#include <stdio.h>
typedef struct node {
char value;
struct node *next_node;
}NODE;
NODE *create_node(char v){
NODE *mynode;
mynode = (NODE*)malloc(sizeof(NODE));
mynode->value = v;
mynode->next_node = NULL;
return mynode;
}
void append_node(NODE* h, NODE* n) {
struct node *tail;
if (h == NULL || n == NULL)
return;
tail = h;
while (h->next_node != NULL)
h = h->next_node;
h->next_node = n;
}
//delete_node
void delete_node(NODE* h, int a, int num){
if (h == NULL || h->next_node == NULL)
return;
NODE* temp;
NODE* now;
now = h;
if(h != NULL && h->next_node != NULL){
for(int i = 0; i < a - 1; i++){
now = now->next_node;
}
temp = now->next_node;
for(int j = 0; j < num; j++){
now->next_node = now->next_node->next_node;
}
}
}
void print(NODE* h) {
int n = 0;
while (1) {
printf("index %d : %c\n", n++, h->value);
if (h->next_node == NULL)
break;
h = h->next_node;
}
}
<Linked.c>
#include <stdio.h>
#include "Linked01.h"
int main(int argc, char* argv[]) {
NODE* head;
NODE* new_node;
int n = 0;
head = create_node('s'); //head노드를 's'로 선언
char str[] = "tring"; //배열은 노드를 생성하기 위함
char c;
while (str[n] != '\0') {
c = str[n];
new_node = create_node(c); //새로운 노드에 배열에 있는 값을 하나씩 넣기
append_node(head, new_node); //head노드와 새로운 노드를 append
n++;
}
delete_node(head, 3, 2);
print(head);
return 0;
}
<콘솔창>


delete_node 함수에서는 현재 노드의 next_node를 삭제하고,
삭제할 노드의 next_node를 현재 노드와 연결시키는 것이 가장 중요합니다.
위에서 "now->next_node = now->next_node->next_node;"로 코드를 작성하였고, 삭제되는 노드의 개수만큼 이 코드가 실행되도록 for 반복문을 사용하였습니다.
앞 글의 insert 코드에서도 for반복문을 사용하여 "now = now->next_node;" 코드를 반복하는 부분이 있었는데 이런 부분은 따로 함수를 만들어서 선언해도 괜찮을 것 같습니다.
감사합니다!
2021. 08.23
'C언어 > 자료구조' 카테고리의 다른 글
[자료구조 - C언어] 재귀함수(Recursion) - Factorial, fib, Hanoi (0) | 2021.08.31 |
---|---|
[자료구조 - C언어] 큐(Queue) (0) | 2021.08.25 |
[자료구조 - C언어] 스택(Stack) (0) | 2021.08.24 |
[자료구조 - C언어] Linked List(2) - create, insert (0) | 2021.08.23 |
[자료구조 - C언어] Linked List (0) | 2021.08.19 |