链表操作---有序拼接

分别逆序输入两个有序链表,按从小到大的元素顺序组成一个新的链表,并输出这个链表。
#include<stdio.h>                                                     //分别逆序输入两个有序链表,按从小到大的元素顺序组成一个新的链表
#include<stdlib.h>                                                        //并输出这个链表

#define  ERROR  0
#define  OK           1

typedef  int ElemType;
typedef  struct LNode{
        ElemType  data;
        struct LNode * next;
}LNode, * LinkList;

LinkList Combine(LinkList La,LinkList Lb,LinkList Lc);
LinkList ListCreate_L(LinkList L,int n);

int main(){
        int i,m,n;
        LinkList La,Lb,Lc,p;
        scanf("%d %d",&m,&n);                           //分别输入两个链表长度m、n
        La=ListCreate_L(La,m);
        Lb=ListCreate_L(Lb,n);
        Lc=Combine(La,Lb,Lc);
        p=Lc->next;
        for(i=0;i<10;i++){
                printf("%d ",p->data);
                p=p->next;
        }
        return 0;
}
LinkList Combine(LinkList La,LinkList Lb,LinkList Lc){                  //顺序元素链表拼接
        Lc=(LinkList)malloc(sizeof(LNode));                                            //按照从小到大元素顺序拼接
        LinkList pa,pb,pc;
        pa=La->next;
        pb=Lb->next;
        Lc=La;                                                                              //令拼接成的新链表头结点等于La头节点
        pc=Lc;
        while(pa&&pb){
                if(pa->data<=pb->data){
                        pc->next=pa;
                        pc=pc->next;
                        pa=pa->next;
                }
                else{
                        pc->next=pb;
                        pc=pc->next;
                        pb=pb->next;
                }
        }
        if(pa)                                                        //剩余部分拼接
                pc->next=pa;
        else
                pc->next=pb;
        free(Lb);
        return Lc;
}
LinkList ListCreate_L(LinkList L,int n){                    //逆序法输入n个元素,建立链表L
        int i;
        LinkList p;
        L=(LinkList)malloc(sizeof(LNode));
        L->next=NULL;
        for(i=n;i>0;i--){
               p=(LinkList) malloc(sizeof(LNode));
               scanf("%d",&p->data);                                    //输入元素值
              p->next=L->next;
               L->next=p;
        }
        return L;
}

猜你喜欢

转载自blog.csdn.net/youm3872/article/details/80526828
今日推荐