c语言单链表删除操作怎么实现
时间: 2024-09-20 14:01:52 浏览: 30
在C语言中,单链表的删除操作通常涉及三个步骤:找到要删除的节点、更新前一个节点的指针以及释放被删除节点的内存。这里是一个基本的示例,假设我们有一个结构体`Node`表示链表节点,包含`data`和`next`两个成员:
1. **删除第一个元素(头节点)**:
```c
void delete_first(Node** head) {
if (*head == NULL) return; // 链表为空
Node* temp = *head;
*head = (*head)->next; // 更新头节点
free(temp); // 释放原头节点
}
```
2. **删除指定节点**:
```c
void delete_node(Node** head, int key) {
Node* current = *head, *prev = NULL;
while (current != NULL && current->data != key) {
prev = current;
current = current->next;
}
if (current == NULL) return; // 节点未找到
if (prev == NULL) { // 删除头节点
*head = current->next;
} else {
prev->next = current->next; // 删除当前节点
}
free(current); // 释放节点内存
}
```
3. **删除所有匹配的节点**:
```c
void delete_all(Node** head, int key) {
Node* current = *head, *temp = NULL;
while (current != NULL && current->data == key) {
temp = current;
current = current->next;
}
if (current == NULL) return; // 没有要删除的节点
temp->next = current->next; // 移除链表中的首次出现
free(temp); // 释放已删除的节点
// 递归处理剩余部分
delete_all(¤t->next, key);
}
```
阅读全文