C语言已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此 结点,然后删除。
时间: 2024-05-08 07:18:50 浏览: 92
C语言实现带头结点的链表的创建、查找、插入、删除操作
好的,针对您的问题,我给您提供以下的C语言代码来删除单向链表中的节点:
```c
#include <stdio.h>
#include <stdlib.h>
//定义链表结构体
typedef struct node {
int data;
struct node* next;
} Node;
//链表的删除方法
void deleteNode(Node** head, int target) {
Node* tmp = *head; //定义辅助节点
Node* prev = NULL; //定义前一个节点
//遍历找到目标节点
while (tmp != NULL && tmp->data != target) {
prev = tmp;
tmp = tmp->next;
}
//判断是否找到目标节点
if (tmp == NULL) {
printf("未找到目标节点\n");
return;
}
//找到目标节点,进行删除
if (prev == NULL) { //目标节点在头节点
*head = (*head)->next;
free(tmp);
}
else { //目标节点在中间或尾部
prev->next = tmp->next;
free(tmp);
}
}
int main() {
//创建链表
Node* head = malloc(sizeof(Node));
head->data = 1;
head->next = NULL;
Node* node1 = malloc(sizeof(Node));
node1->data = 2;
node1->next = NULL;
Node* node2 = malloc(sizeof(Node));
node2->data = 3;
node2->next = NULL;
head->next = node1;
node1->next = node2;
//删除节点
deleteNode(&head, 2);
//输出链表
Node* tmp = head;
while (tmp != NULL) {
printf("%d ", tmp->data);
tmp = tmp->next;
}
printf("\n");
return 0;
}
```
以上代码演示了如何在单向链表中删除一个特定节点。主要分为三步:
1.首先遍历整个链表,找到目标节点。
2.找到目标节点后,将其从链表中删除。
3.最后输出链表看是否删除成功。
希望以上代码可以帮到您!
阅读全文