设有一个带头结点的循环单链表,其结点值均为正整数。试设计一个算法,反复找出单链表中结点值最小的结点,并输出之,然后将该结点从中删除,直到单链表空为止,最后再删除表头结点。

admin2012-06-26  56

问题 设有一个带头结点的循环单链表,其结点值均为正整数。试设计一个算法,反复找出单链表中结点值最小的结点,并输出之,然后将该结点从中删除,直到单链表空为止,最后再删除表头结点。

选项

答案void delall(LinkL5.st&L){ LNode*p,*pre,*minp,*minpre; while(L一>next!=L){ //循环单链表不空时循环 p=L一>next; pre=L; minp=p; minpre=pre; while(p!=L){ //从头开始查找最小值的结点 if(p一>datadata){ minp=p; minpre=pre; } pre=p; //p、pre同步后移 p=p一>next; } printf(”%c”,minp一>data); //输出最小值结点 minpre一>next=minp一>next; //删除最小值结点 free(minp); } free(L); }

解析 对于循环单链表L,在不空时循环:每循环一次查找一个最小结点(由minp指向最小结点,minpre指向其前趋结点)并删除它。最后释放头结点。
转载请注明原文地址:https://kaotiyun.com/show/xyxi777K
0

最新回复(0)