链表是一种常用的数据结构,可以在运行时动态分配内存空间,非常灵活。以下是一个简单的C语言链表例程:
#include <stdio.h>
#include <stdlib.h>
// 链表节点结构体定义
struct Node {
int data;
struct Node* next;
};
// 插入节点到链表头部
void insert_node(struct Node** head, int data) {
struct Node* new_node = (struct Node*)malloc(sizeof(struct Node));
new_node->data = data;
new_node->next = *head;
*head = new_node;
}
// 删除指定数值的节点
void delete_node(struct Node** head, int val) {
struct Node* prev = NULL;
struct Node* curr = *head;
while (curr != NULL && curr->data != val) {
prev = curr;
curr = curr->next;
}
if (curr == NULL) {
printf("Node with value %d not found.\n", val);
return;
}
if (prev == NULL) {
*head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
}
// 打印链表所有元素
void print_list(struct Node* head) {
while (head != NULL) {
printf("%d ", head->data);
head = head->next;
}
printf("\n");
}
int main() {
struct Node* head = NULL; // 链表头指针初始化为空
insert_node(&head, 1); // 在头部插入节点
insert_node(&head, 2);
insert_node(&head, 3);
insert_node(&head, 4);
printf("Original list: ");
print_list(head); // 打印链表所有元素
delete_node(&head, 2); // 删除数值为2的节点
printf("List after deletion of node with value 2: ");
print_list(head); // 再次打印链表所有元素
return 0;
}
该程序定义了一个链表节点结构体,包含一个整型数据成员和一个指向下一个节点的指针。实现了三个基本操作:插入节点到链表头部、删除指定数值的节点、打印链表所有元素。在 main()
函数中,初始化一个空的链表头指针,并依次插入四个节点,然后打印链表所有元素。最后删除数值为2的节点,并再次打印链表所有元素。