自定义单链表结构,写出删除链表首个值为X的算法。用c语言写
时间: 2024-03-12 09:44:30 浏览: 51
好的,下面是一种可能的实现方式:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结构体
typedef struct node {
int data; // 数据域
struct node *next; // 指针域
} Node;
// 删除链表首个值为 X 的节点
void deleteFirstX(Node **head, int x) {
Node *p = *head;
Node *prev = NULL;
while (p != NULL && p->data != x) {
prev = p;
p = p->next;
}
if (p != NULL) {
if (prev == NULL) { // 如果是头节点
*head = p->next;
} else {
prev->next = p->next;
}
free(p); // 释放节点内存
}
}
int main() {
// 构造链表 1 -> 3 -> 2 -> 3 -> 4
Node *head = (Node *)malloc(sizeof(Node));
head->data = 1;
head->next = (Node *)malloc(sizeof(Node));
head->next->data = 3;
head->next->next = (Node *)malloc(sizeof(Node));
head->next->next->data = 2;
head->next->next->next = (Node *)malloc(sizeof(Node));
head->next->next->next->data = 3;
head->next->next->next->next = (Node *)malloc(sizeof(Node));
head->next->next->next->next->data = 4;
head->next->next->next->next->next = NULL;
// 删除链表首个值为 3 的节点
deleteFirstX(&head, 3);
// 遍历链表
Node *p = head;
while (p != NULL) {
printf("%d ", p->data);
p = p->next;
}
printf("\n");
// 释放链表内存
p = head;
while (p != NULL) {
Node *q = p;
p = p->next;
free(q);
}
return 0;
}
```
首先定义了链表结构体 `Node`,包含数据域 `data` 和指针域 `next`。然后实现了删除链表首个值为 `x` 的节点的函数 `deleteFirstX`,其参数为链表头指针 `head` 和需要删除的值 `x`。函数内部使用了两个指针 `p` 和 `prev`,`p` 用于遍历链表,`prev` 用于记录 `p` 的前一个节点。当 `p` 指向值为 `x` 的节点时,将其从链表中删除,并释放内存。最后在主函数中演示了如何使用该函数删除链表中的节点,并遍历链表输出剩余节点的值。
阅读全文