有两个单链表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,

1、 有两个单链表LA,LB,其元素均为非递减有序排列,编写算法将它们合并成一个顺序表LC,要求LC也是非递减有序排列。 例如:LA={2,2,3} LB={1,3,3,4} 则LC={1,2,2,3,3,3,4};

部分函数代码请参考以下链接:https://blog.csdn.net/qq_50504109/article/details/120288749




#include<stdio.h>
#include"InstanceLinkList.c"

int main(){

    LinkList MergeLinkList(LinkList LA,LinkList LB);
       LinkList  LA = creatLinkList();
       LinkList  LB = creatLinkList();
       insert(LA,'2',1);
       insert(LA,'2',2);
       insert(LA,'3',3);

       insert(LB,'1',1);
       insert(LB,'3',2);
       insert(LB,'3',3);
       insert(LB,'4',4);

       LinkList  LC = MergeLinkList(LA,LB);
       dispaly(LC);

}

LinkList MergeLinkList(LinkList LA,LinkList LB){

            Node *pa,*pb;
            Node *LC,*pc;
            pa = LA->next;
            pb = LB->next;

            //下面这两步太妙了,我当时还在想要不要开辟一个空节点给LC,没想到答案给的是直接利用现成的,妙妙
            LC = LA;
            LC->next = NULL;
            pc = LC;

            // 条件是用 pa !=NULL 还是 pa->next != NULL 是看你的题目需要不要pa最后指向最后一个节点,还是指向空
            while((pa != NULL) && (pb != NULL)){
                if ( pa->data <= pb->data){

                       pc->next = pa;
                       pc = pa;
                       pa = pa->next;

                }else{
                    pc->next = pb;
                    pc = pb;
                    pb = pb->next;
                }
            }

            //如果pa有剩下,那么直接,把剩下的直接接过来就行
    if (pa){
          pc->next = pa;
    }

    if (pb){
        pc->next = pb;
    }

    free(LB);//释放LB,LA被利用了
    return LC;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值