两个已排序链表的合并

 1  typedef  struct  Node{
 2       int  data;
 3       struct  Node *  next;
 4  }Node,  * LinkList;
 5  void  Merge(LinkList la, LinkList lb, LinkList & lc)
 6  {
 7       //  NULL检测
 8       if ( ! la) {lc  =  pb;  return ;}
 9       if ( ! lb) {lc  =  pa;  return ;}
10      Node *  p;
11      
12       //  确定最大值在la上, 还是lb上
13       if (la.data  >  lb.data) { lc  =  p  =  la; la  =  la -> next; }
14       else  { lc  =  p  =  lb; lb  =  lb -> next; }
15      
16       while (la  && lb)
17      {
18           if (la.data  >  lb.data)
19          {
20              p -> next  =  la;
21              la  =  la -> next;
22          } else   if (la.data  <  lb.data)
23          {
24              p -> next  =  lb;
25              lb  =  lb -> next;
26          } else //  la 与 lb中值相等的情况
27              p -> next  =  la;
28              la  =  la -> next;
29              Node *  tmp  =  lb;
30              lb  =  lb -> next;
31              free(tmp);
32          }
33          p  =  p -> next;
34      }
35       //  剩余部分链表的挂接
36      p -> next  =  (la  ?  la:lb);
37  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值