输入30个数据,生成一个按递增顺序排列的单链表,删除链表中大于A且小于B的节点,并返回这些节点值。A,B值可根据自己输入的数据确定。
1条回答 默认 最新
关注 #include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node *next; }node;//定义一个结构体node node *init(); void output(node *head); void delete_linklist(node *head, int min, int max); node *init()//创建单链表,要求用户输入值 { node *head = NULL; node *p = NULL; node *s = NULL; int input, certain = 1, i = 0; head = (node *)malloc(sizeof(node));//定义头节点 if(head == NULL)//如果申请的头节点失败 { printf("sorry,申请空间失败!"); exit(1);//说实话,这里我也不清楚为什么,借鉴小甲鱼(B站up主)的。 } head->next = NULL; p = head; printf("您好,请输入数据,我们将会输入进去(记得由小往大),输入0结束!\n"); while(certain) { i = i + 1; printf("请输入第%d个数字:", i); scanf("%d", &input); if(input != 0) { s = (node *)malloc(sizeof(node)); if(s == NULL) { printf("sorry,申请空间失败!"); exit(1); } s->data = input; p->next = s; p = p->next; } else { certain = 0; } p->next = NULL; } return head; } void output(node *head)//输出单链表里的数值 { node *p = head->next; while(p != NULL) { printf("%d ", p->data); p = p->next; } printf("\r\n"); } void delete_linklist(node *head, int min, int max)//删除单链表里处于最值中间的数 { node *p = head->next; node *q; while(p != NULL) { if(p->data >= min && p->data <= max) { q->next = p->next; free(p);//这两行的意思是将我们找到的节点给释放 p = q->next; } else { q = p; p = p->next; } } } int main() { int min, max; node *head = NULL; head = init(); printf("您输入的数据分别是:\n"); output(head); printf("\n"); printf("请分别输入最小值和最大值,我们会删除您所创建的单链表的二者中间的数据:"); printf("最小值:"); scanf("%d", &min); printf("最大值:"); scanf("%d", &max); delete_linklist(head, min, max); printf("\n删除后的结果是:"); node *p = head->next;//遍历输出,用函数会出现莫名的bug,应该是有野指针,但由于我也不会,所以只能遍历了 while(p != NULL) { printf("%d ", p->data); p = p->next; } return 0; }
解决 无用评论 打赏 举报
悬赏问题
- ¥20 ARKts悬浮窗和快捷方式问题
- ¥15 comparecluster没有办法kegg
- ¥15 远程访问linux主机超时
- ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
- ¥15 CPU卡指令整合指令数据都在图片上
- ¥15 odoo17处理受托加工产品
- ¥15 如何用MATLAB编码图三的积分
- ¥15 圆孔衍射光强随孔径变化
- ¥15 MacBook pro m3max上用vscode运行c语言没有反应
- ¥15 ESP-PROG配置错误,ALL ONES