酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

编程实现:输入一个正整数 n (0<n<10),做 n 次下列运算: 输入若干个正整数(输入-1为结束标志),建立一个单向链表,将其中的奇数值结点删除后输出,若删除后链表为空则输出null。 1.本题中头文件引用及链表结点类型声明代码如下【此部分代码本题已经内置,无须提交】: #include<stdio.h> #include<stdbool.h> #include<stdlib.h> typedef struct node { int data; struct node *next; } node; 2.本题中main函数已经写好,代码如下【此部分代码本题已经内置,无须提交】: int main() { node *head; int n; scanf("%d", &n); for (int i = 0; i < n; ++i) { // 创建链表 head = create(); // 删除奇数结点 head = delete(head);

以下是 `create` 函数和 `delete` 函数的实现代码: ```c // 创建链表的函数 node* create() { node *head = NULL, *tail = NULL, *newNode; int num; scanf("%d", &num); while (num!= -1) { newNode = (node*)malloc(sizeof(node)); newNode->data = num; newNode->next = NULL; if (head == NULL) { head = newNode; tail = newNode; } else { tail->next = newNode; tail = newNode; } scanf("%d", &num); } return head; } // 删除奇数节点的函数 node* delete(node* head) { node *prev = NULL, *cur = head; while (cur!= NULL) { if (cur->data % 2!= 0) { // 如果是奇数 if (prev == NULL) { // 如果是头节点 head = cur->next; free(cur); cur = head; } else { // 如果不是头节点 prev->next = cur->next; free(cur); cur = prev->next; } } else { // 如果是偶数 prev = cur; cur = cur->next; } } if (head == NULL) { // 检查删除后链表是否为空 printf("null\n"); } else { cur = head; while (cur!= NULL) { printf("%d ", cur->data); cur = cur->next; } printf("\n"); } return head; } ``` 额外需要注意的逻辑点: 1. 在内存分配和释放时,要确保没有内存泄漏。 2. 处理链表的遍历和节点删除时,要正确维护指针的指向,避免出现悬空指针或访问非法内存。 3. 对于输入的整数要进行有效范围的检查,确保符合题目要求。 [2024-11-23 14:50:39 | AI写代码神器 | 485点数解答]

相关提问