自定义单链表结构,写出删除链表首个值为e的算法。用c语言写
时间: 2024-03-12 09:44:53 浏览: 58
以下是使用C语言实现删除链表首个值为e的算法的代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表结构体
typedef struct Node {
int data;
struct Node *next;
} Node;
// 删除链表首个值为e的节点
void delete(Node **head, int e) {
Node *p = *head;
Node *q = NULL;
while (p != NULL && p->data != e) {
q = p;
p = p->next;
}
if (p == NULL) {
printf("链表中不存在值为%d的节点", e);
return;
}
if (q == NULL) {
*head = p->next;
} else {
q->next = p->next;
}
free(p);
}
int main() {
// 创建链表 1->2->3->4->5
Node *head = (Node *) malloc(sizeof(Node));
head->data = 1;
head->next = (Node *) malloc(sizeof(Node));
head->next->data = 2;
head->next->next = (Node *) malloc(sizeof(Node));
head->next->next->data = 3;
head->next->next->next = (Node *) malloc(sizeof(Node));
head->next->next->next->data = 4;
head->next->next->next->next = (Node *) malloc(sizeof(Node));
head->next->next->next->next->data = 5;
head->next->next->next->next->next = NULL;
// 删除链表中第一个值为3的节点
delete(&head, 3);
// 打印链表
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
return 0;
}
```
运行结果如下:
```
1 2 4 5
```
以上代码中,我们定义了一个单链表结构体`Node`,然后实现了`delete`函数,它的作用是删除链表中第一个值为`e`的节点。在删除节点时,我们需要记录当前节点的前驱节点,以便在删除当前节点后,将前驱节点的`next`指针指向当前节点的后继节点。同时,我们还需要特别处理删除链表头节点的情况。最后,我们使用`delete`函数删除了链表中第一个值为3的节点,并打印删除后的链表。
阅读全文