合并两个链表成一个升序链表

  1. LinkList mergeLinkedlist(LinkList &L1,LinkList &L2)  
  2. {  
  3.     LinkList a=NULL;  
  4.     LinkList b=NULL;  
  5.     LinkList c=NULL;  
  6.     LinkList L;  
  7.   
  8.     GreatList(L);                                        
  9.     a=L1->next;         //a指向L1的节点  
  10.     b=L2->next;         //b指向L2的节点  
  11.     c=L;                //c指向L的节点  
  12.     /*  
  13.      *如果L1链表为空,L2链表不为空,直接返回L2的首地址  
  14.      */  
  15.     if(a==NULL&&b!=NULL)  
  16.     {  
  17.         L->next = L2->next;  
  18.         return L;         
  19.     }  
  20.     /*  
  21.      *如果L2链表为空,L1链表不为空,直接返回L1的首地址  
  22.      */  
  23.     else if(b==NULL&&a!=NULL)  
  24.     {  
  25.         L->next = L->next;  
  26.         return L;  
  27.     }  
  28.     /*  
  29.      *如果两条链都为空,直接返回一个空指针  
  30.      */  
  31.     else if(a==NULL&&b==NULL)  
  32.     {  
  33.         L->next = NULL;  
  34.         return L;  
  35.     }  
  36.     /*  
  37.      *否则L1与L2逐一比较,找到值较小的元素,插入到L中  
  38.      */  
  39.     else  
  40.     {  
  41.         while(a!=NULL&&b!=NULL)  
  42.         {  
  43.             /*  
  44.              *第一种情况:a指针所指的元素小于与b指针所指向的元素  
  45.              */  
  46.             if(a->data<b->data)  
  47.             {  
  48.                 c->next = a;  
  49.                 a = a->next;  
  50.                 c = c->next;  
  51.             }  
  52.             /*  
  53.              *第二种情况:a指针所指的元素大于与b指针所指向的元素  
  54.              */  
  55.             else if(a->data>b->data)  
  56.             {  
  57.                 c->next = b;  
  58.                 b = b->next;  
  59.                 c = c->next;  
  60.             }  
  61.             /*  
  62.              *第三种情况:a指针所指的元素等于与b指针所指向的元素  
  63.              */  
  64.             else  
  65.             {  
  66.                 c->next = a;  
  67.                 a = a->next;  
  68.                 b = b->next;  
  69.                 c = c->next;  
  70.             }  
  71.         }  
  72.   
  73.         if (a!=NULL) //如果a指向的单链表没有插入完,则把剩余的插入到L的后面    
  74.         {    
  75.             c->next = a;  
  76.         }    
  77.         if (b!=NULL)//如果b指向的单链表没有插入完,则把剩余的插入到L的后面    
  78.         {    
  79.             c->next = b;  
  80.         }   
  81.         return L;  
  82.     }  
  83. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值