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

admin2019-01-16  25

问题 已知单链表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; //把断点链上 } 提示:首先想到的是拿链表中的元素一个个地与max和min比较,然后删除这个结点。其实因为已知其是有序链表,所以只要找到大于min的结点的直接前趋结点,再找到小于max的结点,然后一并把中间的全部摘掉就可以了。

解析
转载请注明原文地址:https://kaotiyun.com/show/diRi777K
0

最新回复(0)