已知带头结点单链表中各结点的元素值为整形且递增有序,设计算法删除链表中所有大于mink且小于maxk的元素,并释放被删结点的空间。
核心函数如下:
void LinkList_clear(LinkList &L,int mink,int maxk)
{node *q,*t,*p,*r;p = L->next;while (p!=NULL&& p->date <= mink){//查找第一个值大于mink的结点t = p;//t是连接的桥梁指针p = p->next;}if (p!=NULL){while (p && p->date < maxk){ // 当数小于maxk的时候一直往下找p = p->next;}q = t->next;//把之前的位置存起来t->next = p;//改变指针,使其跳跃到范围之外while (q != p){// 释放节点空间r = q->next;delete q;q = r;}}
}
完整代码如下:
#include<stdio.h>
#include<stdlib.h>
#define N 5
typedef int SLDataType;
typedef struct node
{SLDataType date;struct node *next;
}node,*LinkList;
SLDataType LinkList_Init(LinkList &L)
{L=(LinkList)malloc(sizeof(node));if(L==NULL)exit(-1);L->next=NULL;return 1;
}
void LinkList_create(LinkList &L,int n)
{int i;node *p,*q;q=L;printf("请输入递增元素:");for(i=0;i<n;i++){p=(LinkList)malloc(sizeof(node));scanf("%d",&p->date);p->next=NULL;q->next=p;q=p;}
}
void LinkList_print(LinkList &L)
{node *p;p=L->next;printf("单链表的元素为:");while(p){printf("%d ",p->date);p=p->next;}printf("\n");
}
void LinkList_clear(LinkList &L,int mink,int maxk)
{node *q,*t,*p,*r;p = L->next;while (p!=NULL&& p->date <= mink){//查找第一个值大于mink的结点t = p;p = p->next;}if (p!=NULL){while (p && p->date < maxk){ // 当数小于maxk的时候一直往下找p = p->next;}q = t->next;t->next = p;//改变指针while (q != p){// 释放节点空间r = q->next;delete q;q = r;}}
}
int main()
{LinkList L;int n=N;int mink,maxk;LinkList_Init(L);//创建单链表LinkList_create(L,n);//输入单链表的数LinkList_print(L);//打印单链表的元素printf("需要删除数的范围:");scanf("%d%d",&mink,&maxk);getchar();LinkList_clear(L,mink,maxk);//删除链表中所有大于mink且小于maxk的元素LinkList_print(L);//验证删除后的结果return 0;
}
运行结果如下:
已知带头结点单链表中各结点的元素值为整形且递增有序,设计算法删除链表中所有大于mink且小于maxk的元素,并释放被删结点的空间。相关推荐
- 已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值x为的结点插入到表L中,使L仍然有序。
创建链表,main函数中通过while循环找出该插入的位置,插入.应注意L头节点位置的变化,利用一个ptr来记录L的头节点. /*已知带头结点的动态单链表L中的结点是按整数值递增排列的,试写一算法将值 ...
- 3 x 10的python表达式_已知 x = [3, 5, 7],那么表达式 x[10:]的值为_学小易找答案
[判断题]Python 3.x完全兼容Python 2.x. [填空题]已知 x = 3,那么执行语句 x += 6 之后,x的值为 [判断题]在Python 3.x中可以使用中文作为变量名. [判断 ...
- 如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。//现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等
//如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048. //现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等 ...
- C语言练习题:如果已知英尺长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048。现在对应英尺制长度和英寸是多少呢?别忘了1英尺等于12英寸
如果已知英尺长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)*0.3048.现在对应英尺制长度和英寸是多少呢?别忘了1英尺等于12英寸 #include<stdi ...
- 如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048.现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸 ...
- 常考数据结构与算法:删除链表的倒数第n个节点
题目描述 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.删除了链表的倒数第n个节点之后,链表变为1-& ...
- java byte 正数最大_关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)...
先看一段推理 +124:0111 1100 -124:1000 0100 +125:0111 1101 -125:1000 0011 +126:0111 1110 -126:1000 0010 +12 ...
- 算法----删除链表中的节点(Java)
题目: 请编写一个函数,用于 删除单链表中某个特定节点 .在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 . 题目数据保证需要删除的节点 不是末尾节点 . 示例 ...
- 厘米换算英尺英寸 (15 分)如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是?
//这个题主要是只要满12inch就转换为1个foot,只要明白这点就简单了.这个题如果直接舍入可能不过,也就是直接强制类型转化不行. #include <stdio.h> int mai ...
最新文章
- 最短路径-Dijkstra算法与Floyd算法
- 4万字长文ClickHouse应用实战-物化视图在微信的实践
- 让对方ping不通你的主机
- 登录业务介绍(单点登录)
- go python java_一文助你搞懂参数传递原理解析(java、go、python、c++)
- 系统架构师学习笔记-论文摘要部分的写法
- QTP中VBS脚本下FSO、WSH的应用(二)
- 158 行 Python 代码,复现 DeepMind 递归神经网络 DRAW!
- 苹果收购英特尔手机芯片业务;西门子将在华建立 5G 研发中心;React Native 0.60.4 发布 | 极客头条...
- 默认conf指向位置
- Excel怎么对比两个表格数据
- dbv连oracle,oracle工具:DBV的用法
- 昨天买的电动车今天上牌了
- 五、构建deb软件安装包
- Java之png图片工具类
- msrcr(Multi-Scale Retinex with Color Restoration) 带色彩恢复的多尺度视网膜增强算法 整理
- 【Web_接口爬虫_Python3_58同城_requestosetreeproxies】58同城,商铺出租,爬取标题、内容、链接地址,保存文本_20200401
- 在小米实习到SP+转正
- 【安卓学习之常见问题】 Google Play问题-Android 4.4.4平板电脑不能安装 -- (Your device isn‘t compatible with this version)
- 知道创宇区块链安全实验室|二月安全事件总结与回顾