啧啧啧 合并两个单链表 不占用新内存

将链表La和Lb合并为Lc,
条件: 不给Lc分配新内存(即调整Lc的指针指向两链表符合条件的节点);

主要算法


List *T_O(LNode La,LNode Lb,LNode Lc){
/*判断两链表是否存在一处拜访完,一处有几个村没拜访的情况,如果有就判断是哪几个村,并挨家挨户拜访*/
    if(La==NULL||Lb==NULL){
        if(La==NULL&&Lb!=NULL){
            Lc=Lb;
            Lc->next=T_O(La,Lb->next,Lc->next);
        }else if(Lb==NULL&&La!=NULL){
            Lc=La;
            Lc->next=T_O(La->next,Lb,Lc->next);
        }else{ return Lc;}
        return Lc;
    }
    /*
    if(La==NULL){
        Lc=Lb;
        return;
    }else if(Lb==NULL){
        Lc=La;
        return;
    }
    */
    LNode pa=La;
    LNode pb=Lb;//这里也可以不用重新任命对象完成任务,可直接御驾亲征
    if(pa->data<=pb->data){
        Lc=(LNode)malloc(sizeof(List));
        Lc=pa;//使Lc指向搜刮的那一个村
        Lc->next=T_O(La->next,Lb,Lc->next);//抢完一个换下一个
    }else{
        Lc=(LNode)malloc(sizeof(List));
        Lc=pb;
        Lc->next=T_O(La,Lb->next,Lc->next);
    }
    return Lc;
}

主要代码

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
   
    struct node *next;
    int data;
}*LNode,List;

List *InitList(LNode L,int a[],int n){
   
    L=(LNode)malloc(sizeof(List));
    //printf("a值为%d\n",a[n]);
    
    //printf("n为%d\n",n);
    if(n<=3){
   
    L->data=a[n];
    //printf(&
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值