编程实现:输入一个正整数 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点数解答]
- [字节豆包] ```cpp #include <iostream> using namespace std; struct node { int data; node* link; node(int x) : data(x), link(null) {} }; // 查找最大节点及其前一个节点 void findmaxandprev(node* list, node*& maxnode, node*& prevmax) { node* curr = list; maxnode = list; prevmax = null; node* prev = null; while (curr!= null) { if (curr->data > maxnode->data) { maxnode = curr; prevmax = prev; } prev = curr; curr = curr->link; } } // 将最大节点移到链表末尾 void movemaxtoend(node*& list) { node* maxnode = null; node* prevmax = null;(549点数解答 | 2024-10-14 22:55:13)258
- [字节豆包] 编程实现:输入一个正整数 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);(485点数解答 | 2024-11-23 14:50:39)159
- [字节豆包] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct sqlist //单链表结构体 { int data; struct sqlist *next; //指针域 }sqlist; void initlist (sqlist *l, sqlist *m, sqlist *n, sqlist *h) { //todo list yes l->next = null; m->next = null; n->next = null; h->next = null; } void emp(sqlist *l) { if (l->next==null) //todo list)yes printf("链表为空表。\n"); else printf("链表为非空表。\n"); } void length(sqlist *l) { sqlist *p; int length = 0; p=l->next; while(p!=null) { length++; p=p->next; } //todo list(345点数解答 | 2024-10-23 23:11:22)207
- [字节豆包] #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct sqlist //单链表结构体 { int data; struct sqlist *next; //指针域 }sqlist; void initlist (sqlist *l, sqlist *m, sqlist *n, sqlist *h) { //todo list yes l->next = null; m->next = null; n->next = null; h->next = null; } void emp(sqlist *l) { if (l->next==null) //todo list)yes printf("链表为空表。\n"); else printf("链表为非空表。\n"); } void length(sqlist *l) { sqlist *p; int length = 0; p=l->next; while(p!=null)(428点数解答 | 2024-10-23 23:09:51)210
- [字节豆包] #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #define maxsize 100 typedef char elemtype; typedef struct node { elemtype data; struct node* lchild; struct node* rchild; } btnode; typedef struct { btnode* data[maxsize]; int top; } stacktype; void initstack(stacktype* st) { st->top = -1; } bool stackempty(stacktype* st) { return st->top == -1; } bool push(stacktype* st, btnode* e) { if (st->top < maxsize - 1) { st->data[++st->top] = e;(95点数解答 | 2024-12-10 13:17:25)170
- [字节豆包] #include<stdio.h> #include<stdlib.h> #include<time.h> int producerand(int remainder); void initprocess(); void chosedisplace(); struct linknode* fifo(struct linknode* head, int randcount); void optimal(struct linknode* head, int randprocess); struct linknode* lru(struct linknode* head, int randprocess); struct linknode* initlink(); void choicestey(); int allotment(struct linknode* head); int checkfifooptimal(struct linknode* head, int checkpage); void recover(struct linknode* head, int randproc(60点数解答 | 2024-12-13 20:02:21)238
- [阿里通义] #include<stdio.h> #include<stdlib.h> #include<time.h> int producerand(int remainder); void initprocess(); void chosedisplace(); struct linknode* fifo(struct linknode* head, int randcount); void optimal(struct linknode* head, int randprocess); struct linknode* lru(struct linknode* head, int randprocess); struct linknode* initlink(); void choicestey(); int allotment(struct linknode* head); int checkfifooptimal(struct linknode* head, int checkpage); void recover(struct linknode* head, int randproc(858点数解答 | 2024-12-13 20:03:47)256
- [字节豆包] c语言已知两个非降序链表序列s1与s2,设计函数构造出s1与s2的交集新链表s3。 1.本题中头文件引用及链表结点类型声明代码如下【此部分代码本题已经内置,无须提交】: #include<stdio.h> #include<stdbool.h> #include<stdlib.h> typedef struct node { int data; struct node *next; } node; 2.本题中main函数已经写好,代码如下【此部分代码本题已经内置,无须提交】: int main() { node *s1, *s2, *s3; //创建第1个链表 s1 = create(); //创建第2个链表 s2 = create(); //生成交集构成的新链表 s3 = getintersection(s1, s2); //释放第1个链表空间 freeall(s1); //释放第2个链表空间 freeall(s2); //输出新链表 printli(462点数解答 | 2024-12-05 22:30:36)180
- [字节豆包] #include <iostream> #include <stdlib.h> #include <stdio.h> #include<string.h> using namespace std; #define null 0 #define maxsize 100 typedef char datatype; typedef struct node { datatype data[maxsize]; int length; }seqstring; void creat(seqstring *s)//建立字符串顺序表 { scanf("%s",s->data); s->length=strlen(s->data); } void print(seqstring str)//输出字符串 ,以'\0'结尾 { printf("list is:%s\n",str.data); } /*在字符串str中从第i个位置起取长度为len的子串(i从1开始),函数返回子串指针,若子串超出边界返回null。*/ seqstring* substring((146点数解答 | 2024-10-16 08:51:55)197
- [字节豆包] #include<iostream> #include<string> #include<iomanip> #include<fstream> #include<stdlib.h> using namespace std; #define ok 1 #define error 0 #define overflow -2 typedef int status; //status 是函数返回值类型,其值是函数结果状态代码。 typedef int elemtype; //elemtype 为可定义的数据类型,此设为int类型 struct book { string id;//isbn string name;//书名 double price;//定价 }; typedef struct lnode { book data; //结点的数据域 struct lnode *next; //结点的指针域 } lnode, *linklist; //linklist为指向结构体lnode的指针类型 string head_1, head_2, head_3; int lengt(35点数解答 | 2024-10-31 17:38:15)195
- [字节豆包] "createa算法分析及结果 结点的数据结构 typedef struct lnode { int data; // 数据域 struct lnode *next; // 指针域 } linknode; void createa(linknode *&l, int a[],int n) { linknode *p; l=(linknode *) malloc(sizeof (linknode)); l->next=null; for (int i=0; i< n; i++) { p = (linknode *) malloc(sizeof(linknode)); p->data=a[i] ; p->next= l->next ; l->next = p; } } ① 算法时间复杂度 : ② 算法空间复杂度:_________。 调用createf 时对应形参a[]的实参为int b[]={8,9,5,7,3},执行完createf后: ③ 单链表中第一(139点数解答 | 2024-11-14 00:33:32)241
- [阿里通义] "createa算法分析及结果 结点的数据结构 typedef struct lnode { int data; // 数据域 struct lnode *next; // 指针域 } linknode; void createa(linknode *&l, int a[],int n) { linknode *p; l=(linknode *) malloc(sizeof (linknode)); l->next=null; for (int i=0; i< n; i++) { p = (linknode *) malloc(sizeof(linknode)); p->data=a[i] ; p->next= l->next ; l->next = p; } } ① 算法时间复杂度 : ② 算法空间复杂度:_________。 调用createf 时对应形参a[]的实参为int b[]={8,9,5,7,3},执行完createf后: ③ 单链表中第一(502点数解答 | 2024-11-14 00:35:46)203