假定一个使用顺序存储结构的链表可存储100个整数,用c语言编写程序,将该链表中所有值为整数x的元素删除
时间: 2024-12-25 07:36:43 浏览: 2
在C语言中,我们可以使用结构体表示链表节点,并遍历链表,逐个检查每个元素是否等于给定值`x`。如果等于,则删除该节点。这里是一个简单的示例:
```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));
newNode->data = value;
newNode->next = NULL;
return newNode;
}
// 删除链表中值为x的节点
void deleteNodesWithValue(Node** head, int x) {
if (*head == NULL) {
return; // 如果链表为空,直接返回
}
// 遍历链表,找到第一个值不是x的节点并更新头指针
Node* current = *head;
while (current != NULL && current->data == x) {
Node* temp = current;
current = current->next;
free(temp); // 释放已找到的节点内存
}
*head = current; // 更新头指针指向新的开始位置
}
// 打印链表
void printList(Node* node) {
while (node != NULL) {
printf("%d -> ", node->data);
node = node->next;
}
printf("NULL\n");
}
int main() {
int capacity = 100;
int x;
printf("Enter the value to be deleted and its occurrences in the list (up to %d): ", capacity);
scanf("%d", &x);
// 假设我们已经创建了一个有100个元素的链表
Node* head = createNode(0); // 初始化空链表
// ... (后续添加元素到链表)
// 删除值为x的所有节点
deleteNodesWithValue(&head, x);
// 打印处理后的链表
printf("Updated linked list after deleting elements with value %d:\n", x);
printList(head);
return 0;
}
```
阅读全文