已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除(完整的C语言实现)
时间: 2024-12-11 08:41:03 浏览: 15
在C语言中,删除单向链表中的某个节点通常涉及到三个步骤:首先遍历链表找到目标节点,然后更新前一个节点的指针使其指向下一个节点,最后释放被删除节点的内存。这里是一个简单的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* createNode(int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode) {
printf("Memory allocation failed.\n");
return NULL;
}
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 删除链表中的特定节点
void deleteNode(Node** head, int target) {
// 遍历链表,找到目标节点的前一个节点
Node* current = *head;
Node* previous = NULL;
while (current != NULL && current->data != target) {
previous = current;
current = current->next;
}
// 如果找到目标节点,删除它
if (current != NULL) {
// 如果前一个节点为空,那么头节点就是要删除的
if (previous == NULL) {
*head = current->next;
} else {
// 否则,前一个节点的next指向前一个节点的下一个节点
previous->next = current->next;
}
// 释放当前节点的内存
free(current);
} else {
printf("Target node not found in the list.\n");
}
}
int main() {
// 初始化链表
Node* head = createNode(1);
head->next = createNode(2);
head->next->next = createNode(3);
// 删除值为2的节点
deleteNode(&head, 2);
// 打印剩余链表
Node* temp = head;
while (temp != NULL) {
printf("%d -> ", temp->data);
temp = temp->next;
}
printf("NULL\n");
return 0;
}
```
阅读全文