设有一个带头结点的循环单链表 其结点值均为正整数。试设计一个算法 反复找出单链表中结点值最小

学历类 结点,算法,最小 已帮助 人

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

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

热搜:关键路径是事件结点网络中的

答案解析

难度★★☆ 搜索
  • 正确答案: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一>data<minp一>data){ minp=p; minpre=pre; } pre=p; //p、pre同步后移 p=p一>next; } printf(”%c”minp一>data); //输出最小值结点 minpre一>next=minp一>next; //删除最小值结点 free(minp); } free(L); }
    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一>data<minp一>data){ 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指向其前趋结点)并删除它。最后释放头结点。