有序单链表的归并算法

本算法没有利用L1,L2链表的结点,而是通过复制方式新建L3的所有结点,这样没有破坏原有的L1 和L2单链表

本算法的实质就是尾插法建立单链表

思路:
1.让两个指针p.q 先指向两个单链表的首结点。并定义尾指针r,和s
2.建立L3的头结点,并将r指向L3的尾结点
3.通过while循环判断
3.1如果p->data < q->data,则复制p结点得到s结点,然后将s结点链接到 L3的末尾
3.2 如果p->data > q->data,则复制q结点得到s结点,然后将s结点链接到 L3的末尾
4.无论p或q,我们统一用p来处理
5.最后将其中没有遍历的表余下的结点复制到L3中
6.尾结点next域置空

C代码实现:

   void Merge(LinkList * L1,LinkList * L2,LinkList *&L3){
       LinkList * p = L1->next,*q = L2->next,*r,*s;
       L3 = (LinkList *)malloc(sizeof(LinkList));
       r = L3;
       while(p != null && q != null){
           if(p->data > q->data){
               s = (LinkList *)malloc(sizeof(LinkList));
               s->data = p->data;
               p = p->next;
               r->next = s;
               r = s;
           }else{
               s = (LinkList *)malloc(sizeof(LinkList));
               s->data = q->data;
               q = q->next;
               r->next = s;
               r = s;
       }
       if(q != null) p = q;
       while(q != null){
           s = (LinkList *)malloc(sizeof(LinkList));
               s->data = p->data;
               p = p->next;
               r->next = s;
               r = s;
       }
       r->next = null;
   }
}

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值