已知单链表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一>datanext;//找比max小的最后一个元素位置 while(p->next!=q){ h=p->next; P=P一>next: free(h); //释放空间 } p一>next=q; //把断点链上 }
【答案解析】