#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
typedef int element;
typedef struct ListNode {
element data;
struct ListNode *link;
}ListNode;
ListNode *head = NULL;
//노드 생성
ListNode *create_node(element data, ListNode *link) {
ListNode *new_node;
new_node = (ListNode *)malloc(sizeof(ListNode));
new_node -> data = data;
new_node -> link = link;
return(new_node);
}
//특정 데이터를 가진 노드 삽입
void insert_node(ListNode *p, ListNode *new_node) {
if (head == NULL) {
new_node->link = NULL;
head = new_node;
}
else if (p == NULL) {
new_node->link = head;
head = new_node;
}
else {
new_node ->link = p->link;
p->link = new_node;
}
}
//특정 데이터를 가진 노드 삭제
void delete_node(int data) {
if (head == NULL)
return;
ListNode *p = head;
if (p->data == data) {
head = p->link;
free(p);
return;
}
while (p->link != NULL) {
if (p->link->data == data) {
ListNode *delete_node = p->link;
p->link = delete_node->link;
free(delete_node);
return;
}
p = p->link;
}
cout << "해당 데이터가 없습니다.";
return;
}
//모든 노드 출력
void print_list() {
ListNode *p = head;
if (p == NULL) {
cout << "해당 리스트는 비어있습니다.";
}
while (p != NULL) {
cout << p->data << " ";
p = p->link;
}
}
int main() {
ListNode *list1 = create_node(10, NULL);
ListNode *list2 = create_node(20, NULL);
ListNode *list3 = create_node(30, NULL);
insert_node(NULL, list1);
insert_node(list1, list2);
insert_node(list2, list3);
delete_node(30);
print_list();
}