用c语言完成,已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此 结点,然后删除。...
时间: 2024-03-02 20:48:05 浏览: 96
好的,以下是用C语言实现删除单向链表中某一个节点的算法:
```c
struct Node {
int data;
struct Node* next;
};
void deleteNode(struct Node** head, int key) {
// 定义当前节点和前一个节点
struct Node *temp = *head, *prev = NULL;
// 如果头节点就是要删除的节点
if (temp != NULL && temp->data == key) {
*head = temp->next; // 更新头节点
free(temp); // 释放节点内存
return;
}
// 遍历链表查找要删除的节点
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// 如果没有找到要删除的节点
if (temp == NULL) {
return;
}
// 要删除的节点是最后一个节点
if (temp->next == NULL) {
prev->next = NULL;
free(temp);
return;
}
// 要删除的节点是中间节点
prev->next = temp->next;
free(temp);
}
```
以上算法中,我们首先判断头节点是否为要删除的节点,如果是,直接更新头节点并释放内存。否则,我们遍历整个链表查找要删除的节点,并记录前一个节点的位置。如果找到要删除的节点,则判断要删除的节点是否是最后一个节点,如果是,我们更新前一个节点的`next`指针为`NULL`;否则,我们将前一个节点的`next`指针指向要删除节点的下一个节点,并释放要删除的节点的内存。
阅读全文