应用题
16.已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于max的结点(若表中有这样的结点),同时释放被删结点的空间,这里min和max是两个给定的参数。
【正确答案】struet node{
Datatype data;
struct node*next;
}ListNode;
typedef ListNode*LinkList:
void DeleteList(LinkList L,DataType min,DataType max){
ListNode*P,*q,*h;
P=L一>next: //采用代表头结点的单链表
while(P&&p一>data<=min){ //找比min大的前一个元素位置
q=P:
P=P一>next:
}
p=q: //保存这个元素位置
while(q&&q一>data<max)q=q一>next;//找比max小的最后一个元素位置
while(p->next!=q){
h=p->next;
P=P一>next:
free(h); //释放空间
}
p一>next=q; //把断点链上
}
【答案解析】