
/*
设一个带头结点的单链表所有元素的数据值无序,试编写函数删除表中介于给定的两个值(作为函数参数给出)之间的元素。
分析:
分别设置pre,p,r指针,遍历,符合条件便进行删除。
*/
struct Link {
int data;
struct Link *next;
};
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
void deleteNum(Link *h,int min,int max) {
struct 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;
struct Link*head;
Link *createLink(int);//创建链表的代码我单独封装了一个文件
void printfNowLink(Link*);
head = createLink(0);
printf("请输入要删除的值所在的范围:\n");
printf("min=");
scanf("%d",&min);
printf("max=");
scanf("%d", &max);
deleteNum(head,min,max);
printfNowLink(head);
return 0;
}