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

admin2013-07-12  43

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

选项

答案void delall(LinkList&L){ LNode * p,*pre,* minp,* minpre; while(L->next!:L){ //循环单链表不空时循环 p=L->next; pre=L; minp=p; mijnpre=pre; while(p!=L){ //从头开始查找最小值的结点 if(p->dat:adata){ 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://jikaoti.com/ti/FwajFFFM
0

最新回复(0)