7.设在一个带表头节点的单链表中所有元素节点的数据值无序,
试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素(若存在)
思路:
此题单链表无序;
如果有序的话,可以找到第一个大于等于给定值和第一个小于等于给定值的元素
把中间删除就行了。
但这里是无序的,就全部遍历一遍,
找到符合条件的,就把它删除;找不到就不删除
/*
设一个带头节点的单链表所有元素的数据值无序,
试编写函数删除表中介于给定的两个值(作为函数参数给出)之间的元素
分析:
分别设置pre,p,r指针,遍历,符合条件便进行删除。
*/
#define_CRT_SECURE_NO_WARNINGS
#inclulde<stdio.h>
#include<stdlib.h>
#include"linkStruct.h"//通过自创建头文件引入结构体,ctrl+鼠标左键点击即可查看
void deleteNum(Link *h,int min,int max){
Link *pre=h,*p=h->next,*r;
while(p){
if(p->data>min&&p->data<max){//符合条件,进行删除
r=p->next;
pre->next=p->next;
free(p);
p=r;
}
else{
pre=p;
p=p->next;
}
}
}
int main(){
int min,max;
Link*head;
Link*createLink(int);//创建链表的代码,单独封装成一个文件
void printfNowLink(Link*);
head=createLink(0);
printf("请输入要删除的值所在的范围:\n");
printf("min=");
scanf("%d",&max);
deleteNum(head,min,max);
printfNowLink(head);
return 0;
}