题目:设计一个算法,删除递增有序链表中值大于mink且小于maxk的所有元素(mink和maxk是给定的两个参数,其值可以和表中的元素相同,也可以不同 )。
思路:题目所说链表是递增的,所以符合删除条件的结点必定连在一起,所以我们可以先找到待删除区间,之后把前后两部分接起来就好了。
代码如下:
```c
void deletenode(Linklist& L, int mink, int maxk)
{
Linklist q, p = L->next;
Linklist pre= (LNode*)malloc(sizeof(LNode));
while (p && p->elem <= mink)//跳过小于mink的结点
{
pre = p;
p = p->next;
}
//这里之后的结点值都是大于mink的了
if (p) {
while (p && p->elem < maxk)//删除小于maxk的结点
{
q = p;
p = p->next;
delete q;
}
}
pre->next = p;//把前部分和后部分相接
}