본문 바로가기

C++

[C++] 단순 연결 리스트 생성, 삽입, 삭제, 출력 코드 구현

#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();
}