您当前的位置:首页 > 计算机 > 编程开发 > C语言

反复找出一个循环单链表中的最小值并删除,直到链表为空

时间:01-03来源:作者:点击数:

问题描述:

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

问题解答:

对于循环单链表L,在不空时循环:每循环一次查找一个最小结点(由minp指向最小值结点,minpre指向其前驱结点)并删除它。最后释放头结点。

void Del_All(LinkList &L){
    // 本算法实现每次删除循环单链表中的最小元素,直到链表空为止
    LNode *p, *pre, *minp, *minpre;
    while(L->next!=L){  //表不空,循环
        p=L->next; pre=L;  //p为工作指针,pre指向其前驱
        minp=p; minpre=pre;  //minp 指向最小值结点
        while(p!=L){  //循环一趟,查找最小值结点
            if(p->data<minp->data){
                minp=p;  //找到值更小的结点
                minpre=pre;
            }
            pre=p;  //查找下一个结点
            p=p->next;
        }
        printf ("%d", minp->data);  //输出最小值结点元素
        minpre->next=minp->next;  //最小值结点从表中“断”开
        free(minp) ; //释放空间
    }
    free (L) ;  //释放头结点
}

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门