W 개발 일지

[자료구조] C언어 연결리스트(Linked list) 노드 삭제 본문

C/자료구조-알고리즘

[자료구조] C언어 연결리스트(Linked list) 노드 삭제

waVwe 2021. 4. 9. 22:38
반응형

2021.04.09 - [C/자료구조] - [자료구조] C언어 연결리스트(Linked list) 생성 / 출력

 

[자료구조] C언어 연결리스트(Linked list) 생성 / 출력

연결리스트 만들기 "월" "화" "수" "목" "금" 등 요일을 데이터값으로 갖는 연결리스트를 만들어보자. typedef struct node {         char data;         struct node* next;     } ..

tildacoderecorder.tistory.com

*이 글의 예제와 설명은 연결리스트의 개념에 대해 설명한 위 글을 기반으로 함.

 

연결리스트에서 노드 삭제하기

pre의 다음 노드를 삭제하는 방법

typedef struct node {
    char data;
    struct node* next;
} Node;
 
Node* head;
 
void delete(Node *pre) {
    Node* old;
    if (head == NULL) {
        printf("ERROR!!");
        return;
    }
    old = pre->next;
    if (old == NULLreturn;
    pre->next = old->next;
}
cs

 

먼저 두 가지의 경우를 살펴봐야한다.

1. head가 NULL일 경우

2. pre의 다음 노드가 없을 경우

 

if문을 통해 head가 NULL이면 에러 메세지와 함께 리턴한다.

그렇지 않다면 구조체 포인터 변수 old를 생성해 pre노드의 다음 노드를 가리키도록 한다. old = pre->next

 

만약 old가 NULL이라면 (pre가 마지막 노드였다면) 삭제할 노드가 없으므로 리턴한다.

 

그렇지 않고 pre뒤로 노드가 더 있다면 pre->next = old->next를 한다. 이 부분을 그림으로 보면 다음과 같다.

 

old가 pre의 다음 노드인 node1을 가리키고 있으므로 old->next는 그 다음 노드인 node2를 가리키게 된다.

pre->next에 old->next값을 넣어줌으로써 pre는 node2를 가리키게 되고 node1은 연결리스트에서 제거된다.

* 위 그림의 예제는 pre뒤에 노드가 두 개 이상 있을 때를 가정한 것이며, node2자리에 노드 아닌 NULL이 있어도 똑같이 성립된다.

 

 

 

참조 : C로 배우는 쉬운 자료구조 / 이지영 / 한빛아카데미

반응형