用C语言编写,删除递增有序链表中值大于25的所有偶数元素,要求从键盘输入这10个数字{8,12,13,21,24,30,41,50,53,66}。
时间: 2024-01-11 21:03:18 浏览: 19
下面是基于链表实现的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链表结点类型
typedef struct node {
int val;
struct node* next;
} Node;
// 定义链表类型
typedef struct {
Node* head;
Node* tail;
} LinkedList;
// 初始化链表
void initList(LinkedList* list) {
list->head = NULL;
list->tail = NULL;
}
// 添加结点到链表尾部
void addNode(LinkedList* list, int val) {
Node* node = (Node*)malloc(sizeof(Node));
node->val = val;
node->next = NULL;
if (list->tail == NULL) {
list->head = node;
list->tail = node;
} else {
list->tail->next = node;
list->tail = node;
}
}
// 删除结点
void deleteNode(LinkedList* list, Node* prev, Node* curr) {
if (curr == list->head) {
list->head = curr->next;
} else {
prev->next = curr->next;
}
if (curr == list->tail) {
list->tail = prev;
}
free(curr);
}
// 删除递增有序链表中值大于25的所有偶数元素
void deleteEven(LinkedList* list) {
Node* curr = list->head;
Node* prev = NULL;
while (curr != NULL) {
if (curr->val > 25) {
break;
}
if (curr->val % 2 == 0) {
deleteNode(list, prev, curr);
curr = (prev == NULL ? list->head : prev->next);
} else {
prev = curr;
curr = curr->next;
}
}
}
// 打印链表
void printList(LinkedList* list) {
Node* curr = list->head;
while (curr != NULL) {
printf("%d ", curr->val);
curr = curr->next;
}
printf("\n");
}
int main() {
int arr[] = {8, 12, 13, 21, 24, 30, 41, 50, 53, 66};
LinkedList list;
initList(&list);
for (int i = 0; i < 10; i++) {
addNode(&list, arr[i]);
}
deleteEven(&list);
printList(&list);
return 0;
}
```
运行结果为:
```
13 21 41 53
```