A-A+

已知单链表L是一个递增有序表 试写一高效算法 删除表中值大于min且小于ma.x的结点(若表

2022-08-12 15:55:38 问答库 阅读 196 次

问题详情

已知单链表L是一个递增有序表,试写一高效算法,删除表中值大于min且小于ma.x的结点(若表中有这样的结点),同时释放被删结点的空间,这里min和max是两个给定的参数。


请帮忙给出正确答案和分析,谢谢!

参考答案

正确答案:truct node{Datatype data;struct node * next:}ListNode;typedef ListNode * LinkList;void DeleteList(LinkList LDataType minDataType 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)//找比max小的最后一个元素位置{q=q一>next:}while(p->next!=q){h=p->next:P=P一>next;free(h);//释放空间}p->next=q;//把断点链上}
首先想到的是拿链表中的元素一个个地与max和min比较,然后删除这个结点。其实因为已知其是有序链表,所以只要找到大于min的结点的直接前趋结点,再找到小于max的结点,然后一并把中间的全部摘掉就可以了。

考点:中值,结点