将两个递增的有序链表合并为一个递减的有序链表

题目描述

将两个递增的有序链表合并为一个递减的有序链表,要求仍使用原来的存储空间,允许有重复数据

算法思想

两个递增合成一个递减,利用头插法,这样就可以继续从小到大插入数据,而新链表中的数据顺序是从大到小的,一个链表为空时,可以直接将另一个链表剩余的数据链接在新链表的最后

代码演示

void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
    pa=La->next;
    pb=Lb->next;  //将pa,pb初始化为La,Lb的首元结点
    pc=Lc=pa;  //用La的头结点作Lc的头结点
    while(pa&&pb){  //La和Lb都不为空
        if(pa->date<=pb->date){ //头插法,插入较小的数据,为递减排序
            q=pa;
            pa->next=Lc->next;
            Lc->next=pa;
            pa=q->next;
        }
        else{
            q=pb;
            pb->next=Lc->next;
            Lc->next=pb;
            pb=q->next;
        }
    }
    while(!pa){ //La为空,将Lb剩余的数据头插在Lc最后
        q=pb;
        pb->next=Lc->next;
        Lc->next=pb;
        pb=q->next;
    }
    while(!pb){  //Lb为空,将La剩余的数据头插在Lc最后
        q=pa;
        pa->next=Lc->next;
        Lc->next=pa;
        pa=q->next;
    }
    delete Lb; //删除Lb头结点
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值