带头结点有序单链表的合并

typedef int Item;
typedef struct node
{
        Item item;
        struct node *next;
}Node,*List;

void merge1(List la, List lb, List *lc)
{
        Node *pa,*pb,*pc;
        pa=la->next;
        pb=lb->next;
        pc=(*lc)=la;
        while(pa && pb){
                if(pa->item <= pb->item){
                        pc->next=pa;
                        pc=pa;
                        pa=pa->next;
                }else{
                        pc->next=pb;
                        pc=pb;
                        pb=pb->next;
                }
        }
        pc->next=pa?pa:pb;
        free(lb);
}

/*two non-headnode list merge*/
List __merge(List la, List lb)
{
        List lc;
        if(la==NULL)
                return lb;
        if(lb==NULL)
                return la;
        if(la->item <= lb->item){
                lc=la;
                lc->next=__merge(la->next,lb);
        }else{
                lc=lb;
                lc->next=__merge(la,lb->next);
        }

   return lc;
}
List merge2(List la, List lb)
{
        if(la->next==NULL){
                free(la);
                return lb;
        }
        if(lb->next==NULL){
                free(lb);
                return la;
        }
        List lc=malloc(sizeof(Node));
        lc->next=__merge(la->next,lb->next);
        free(la);
        free(lb);
        return lc;
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值