用C语言写一段代码:设计一个算法,删除顺序表中值为x的所有节点,并调用。
时间: 2024-09-27 14:08:36 浏览: 53
在C语言中,如果你有一个简单的单链表结构,可以创建一个函数来遍历列表,删除值为`x`的节点。这里是一个基本的示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 创建新节点
Node* create_node(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;
}
// 删除值为x的节点
void delete_nodes(Node** head, int x) {
// 检查头节点是否存在,如果不存在则直接返回
if (*head == NULL) {
return;
}
// 遍历链表
Node* current = *head;
while (current != NULL) {
// 如果当前节点的数据等于x,则删除它
if (current->data == x) {
Node* temp = current;
current = current->next; // 将当前节点指向下一个
free(temp); // 释放被删除节点的内存
} else {
current = current->next;
}
}
// 更新头节点,如果链表中所有节点都被删除了
if (*head == NULL) {
*head = NULL;
}
}
// 测试删除操作
void test_delete(int x, int list[]) {
Node* head = create_node(list[0]);
for (int i = 1; list[i] != 0; ++i) {
Node* newNode = create_node(list[i]);
newNode->next = head;
head = newNode;
}
delete_nodes(&head, x);
Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
int main() {
int list[] = {1, 2, 3, 4, 5, 3, 2, 1};
int x = 3;
test_delete(x, list);
return 0;
}
```
这个程序首先创建一个链表,然后调用`delete_nodes`函数删除所有值为`x`的节点,最后打印出处理后的链表。
阅读全文