[C語言] Link List

Link List

#include <stdio.h>
#include <stdlib.h>

struct node_test
{
	int data;
	node_test* next;
};
typedef struct node_test node;

void remove_node(node*);
void print_lists(node*);
void free_lists(node*);

node* create_node(int data)
{
	// 動態配置記憶體
	// malloc=動態
	node* n = (node*)malloc(sizeof(node)); 

	n->data = data;
	n->next = NULL;

	return n;
}
void insert_node(node* n1, node* n2)
{
	n2->next = n1->next;
	n1->next = n2;
}
int main(void)
{
	// 宣告節點
	node* lists = create_node(0);
	node* a = create_node(1);
	node* b = create_node(2);
	node* c = create_node(3);
	node* d = create_node(4);
	node* e = create_node(5);

	// 0 -> 5
	insert_node(lists, e);

	// 0 -> 1 -> 5
	insert_node(lists, a);

	// 1 -> 2 -> 5
	insert_node(a, b);

	// 1 -> 3 -> 2
	insert_node(a, c);

	// 5 -> 4
	insert_node(e, d);

	print_lists(lists);
	free_lists(lists);

	system("pause");
}
// 宣告相關函式

void remove_node(node* n1)
{
	n1->next = n1->next->next;
}

void print_lists(node* lists)
{
	node* n = lists;

	// 依序印出節點內容
	while (n != NULL)
	{
		printf("%d ", n->data);

		n = n->next;
	}

	printf("\n");
}

void free_lists(node* lists)
{
	// 遞迴刪除串列所有節點
	if (lists->next != NULL)
	{
		free_lists(lists->next);
	}

	free(lists);
}