C语言, 删除单链表指定元素(10分) 题目内容: 建立长度为n的单链表,n>0,删除单链表中等于给定值的元素。数据类型指定为整型。 输入格式: 第一行为链表长度n; 第二行为链表中的n个数据元素的值; 第三行为需要删除的元素值。 输出格式: 输出为删除后的链表中的所有数据元素的值。 输入样例: 4 45 12 34 8 34 输出样例: 45 12 8 时间限制:500ms内存限制:32000kb
时间: 2023-10-25 16:06:33 浏览: 147
好的,我可以帮你解决这个问题。以下是一个简单的 C 语言程序,可以删除单链表中等于给定值的元素:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义单链表节点
typedef struct Node {
int data; // 数据
struct Node* next; // 指向下一个节点的指针
} Node;
// 创建单链表
Node* createList(int n) {
Node* head = NULL;
Node* tail = NULL;
for (int i = 0; i < n; i++) {
int data;
scanf("%d", &data);
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
if (tail == NULL) {
head = node;
tail = node;
} else {
tail->next = node;
tail = node;
}
}
return head;
}
// 删除单链表中等于给定值的元素
Node* deleteNode(Node* head, int val) {
Node* prev = NULL;
Node* curr = head;
while (curr != NULL) {
if (curr->data == val) {
if (prev == NULL) {
head = curr->next;
} else {
prev->next = curr->next;
}
free(curr);
curr = prev == NULL ? head : prev->next;
} else {
prev = curr;
curr = curr->next;
}
}
return head;
}
// 打印单链表中的所有元素
void printList(Node* head) {
Node* curr = head;
while (curr != NULL) {
printf("%d ", curr->data);
curr = curr->next;
}
printf("\n");
}
int main() {
int n;
scanf("%d", &n);
Node* head = createList(n);
int val;
scanf("%d", &val);
head = deleteNode(head, val);
printList(head);
return 0;
}
```
程序中使用了 `Node` 结构体来定义单链表节点,其中包含了数据和指向下一个节点的指针。`createList` 函数用于创建一个长度为 `n` 的单链表,并返回链表的头指针。`deleteNode` 函数用于删除单链表中等于给定值的元素,并返回删除后的链表的头指针。`printList` 函数用于打印单链表中的所有元素。
在主函数中,程序首先读入链表长度 `n`,然后调用 `createList` 函数创建单链表。接着读入需要删除的元素值 `val`,并调用 `deleteNode` 函数删除相应的元素。最后调用 `printList` 函数打印删除后的链表中的所有元素。
希望这个程序能对你有所帮助!
阅读全文