on
[자료구조 - C언어] Linked List(3) - delete
[자료구조 - C언어] Linked List(3) - delete
Delete - 노드 삭제하기
delete_node : 인덱스 값과 삭제할 노드의 개수를 입력하여 해당 노드를 삭제함.
#include #include 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++, h->value); if (h->next_node == NULL) break; h = h->next_node; } }
#include #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; }
<콘솔창>
index 3부터 2개 노드 삭제
'i', 'n' 2개 노드 삭제
delete_node 함수에서는 현재 노드의 next_node를 삭제하고,
삭제할 노드의 next_node를 현재 노드와 연결시키는 것이 가장 중요합니다.
위에서 "now->next_node = now->next_node->next_node;"로 코드를 작성하였고, 삭제되는 노드의 개수만큼 이 코드가 실행되도록 for 반복문을 사용하였습니다.
앞 글의 insert 코드에서도 for반복문을 사용하여 "now = now->next_node;" 코드를 반복하는 부분이 있었는데 이런 부분은 따로 함수를 만들어서 선언해도 괜찮을 것 같습니다.
감사합니다!
2021. 08.23
from http://yjchoi010517.tistory.com/49 by ccl(A) rewrite - 2021-08-23 16:26:08