C语言单向链表
单向链表是一种数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。C语言中可以通过结构体来实现单向链表。
下面是一个简单的单向链表的结构体定义:
struct Node {
int data; // 数据元素
struct Node* next; // 指向下一个节点的指针
};
通过这个结构体,我们可以定义一个单向链表的头指针:
struct Node* head = NULL;
在单向链表中,添加一个节点的操作可以分为两个步骤:
- 创建一个新节点
- 将新节点插入到链表中
下面是一个向单向链表中添加节点的函数:
void addNode(int data) {
struct Node* newNode = (struct Node*) malloc(sizeof(struct Node)); // 创建一个新节点
newNode->data = data; // 将数据元素赋值给新节点
newNode->next = NULL; // 将新节点的指针初始化为NULL,表示它是链表的最后一个节点
if (head == NULL) { // 如果链表为空,则将新节点设置为头节点
head = newNode;
} else { // 如果链表不为空,则将新节点插入到链表的末尾
struct Node* current = head;
while (current->next != NULL) { // 找到链表的最后一个节点
current = current->next;
}
current->next = newNode; // 将新节点插入到链表的末尾
}
}
遍历单向链表可以使用一个循环来完成:
void printList() {
struct Node* current = head;
while (current != NULL) { // 循环遍历链表中的节点
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
删除单向链表中的节点可以分为两个步骤:
- 找到要删除的节点
- 将要删除的节点从链表中移除
下面是一个从单向链表中删除节点的函数:
void deleteNode(int data) {
struct Node* current = head;
struct Node* previous = NULL;
while (current != NULL && current->data != data) { // 找到要删除的节点
previous = current;
current = current->next;
}
if (current == NULL) { // 如果找不到要删除的节点,则直接返回
return;
}
if (previous == NULL) { // 如果要删除的节点是头节点,则将头指针指向下一个节点
head = current->next;
} else { // 如果要删除的节点不是头节点,则将上一个节点的指针指向下一个节点
previous->next = current->next;
}
free(current); // 释放要删除的节点的内存空间
}
这些函数只是单向链表的基本操作,还有很多其他的操作可以实现,如在指定位置插入节点、反转链表等等。
原文地址: https://www.cveoy.top/t/topic/b1Xs 著作权归作者所有。请勿转载和采集!