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



LinkList mergeLinkedlist(LinkList &L1,LinkList &L2)
{
    LinkList a=NULL;
    LinkList b=NULL;
    LinkList c=NULL;
    LinkList L;

    GreatList(L);                                      
    a=L1->next;         //a指向L1的节点
    b=L2->next;         //b指向L2的节点
    c=L;                //c指向L的节点
    /*
     *如果L1链表为空,L2链表不为空,直接返回L2的首地址
     */
    if(a==NULL&&b!=NULL)
    {
        L->next = L2->next;
        return L;       
    }
    /*
     *如果L2链表为空,L1链表不为空,直接返回L1的首地址
     */
    else if(b==NULL&&a!=NULL)
    {
        L->next = L->next;
        return L;
    }
    /*
     *如果两条链都为空,直接返回一个空指针
     */
    else if(a==NULL&&b==NULL)
    {
        L->next = NULL;
        return L;
    }
    /*
     *否则L1与L2逐一比较,找到值较小的元素,插入到L中
     */
    else
    {
        while(a!=NULL&&b!=NULL)
        {
            /*
             *第一种情况:a指针所指的元素小于与b指针所指向的元素
             */
            if(a->data<b->data)
            {
                c->next = a;
                a = a->next;
                c = c->next;
            }
            /*
             *第二种情况:a指针所指的元素大于与b指针所指向的元素
             */
            else if(a->data>b->data)
            {
                c->next = b;
                b = b->next;
                c = c->next;
            }
            /*
             *第三种情况:a指针所指的元素等于与b指针所指向的元素
             */
            else
            {
                c->next = a;
                a = a->next;
                b = b->next;
                c = c->next;
            }
        }

        if (a!=NULL) //如果a指向的单链表没有插入完,则把剩余的插入到L的后面  
        {  
            c->next = a;
        }  
        if (b!=NULL)//如果b指向的单链表没有插入完,则把剩余的插入到L的后面  
        {  
            c->next = b;
        } 
        return L;
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值