给定一个单链表A删除值大于Val(Val是用户的输入参数,其值可以和链表中元素相同也可以不同)的所有元素。 (1)完成链表的初始化; (2)完全给定元素的删除; (3)输出删除元素后的链表。c语言
时间: 2024-09-12 13:06:58 浏览: 29
在C语言中,我们可以使用结构体表示链表节点,并创建函数来实现这个功能。以下是逐步步骤:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表节点结构
typedef struct Node {
int data;
struct Node* next;
} Node;
// 初始化链表
Node* createList(int n, int val) {
Node* head = NULL;
Node* temp = NULL;
for (int i = 0; i < n; i++) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = (i == 0 && val == 0) ? val : (val > newNode->data) ? val : newNode->data;
newNode->next = NULL;
if (head == NULL) {
head = newNode;
temp = newNode;
} else {
temp->next = newNode;
temp = newNode;
}
}
return head;
}
// 删除大于val的元素
void deleteElements(Node* head, int val) {
Node* current = head;
Node* prev = NULL;
while (current != NULL) {
if (current->data > val) {
if (prev != NULL) {
prev->next = current->next;
} else {
head = current->next;
}
free(current);
} else {
prev = current;
}
current = current->next;
}
}
// 打印链表
void printList(Node* head) {
while (head != NULL) {
printf("%d -> ", head->data);
head = head->next;
}
printf("NULL\n");
}
int main() {
int n, val;
printf("Enter the number of elements and a value to compare: ");
scanf("%d %d", &n, &val);
Node* list = createList(n, val); // 初始化链表
printf("Original List: ");
printList(list); // 输出原链表
deleteElements(list, val); // 删除元素
printf("List after deleting elements greater than %d: ", val);
printList(list); // 输出删除后链表
return 0;
}
```
在这个代码中,我们首先创建一个链表,然后遍历它并删除所有大于给定值`val`的元素。最后打印出原始链表和处理后的链表。
阅读全文