将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

/*
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 
*/
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#include <iostream>
typedef struct node{
    int data;
    struct node *next;
}LinkList;
void print(LinkList *L){
    LinkList *p=L->next;
    while(p){
        printf("%d ",p->data);
        p=p->next;
    }
    printf("\n");
}
void create(LinkList *&L,int str[],int n){
    LinkList *r,*s;
    L=(LinkList*)malloc(sizeof(LinkList));
    r=L;
    int i;
    for(i=0;i<n;i++){
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=str[i];
        r->next=s;
        r=s;
    }
    r->next=NULL;
}
void un(LinkList *&L,LinkList *LA,LinkList *LB){
    L=(LinkList*)malloc(sizeof(LinkList));
    LinkList *pa=LA->next,*pb=LB->next,*r=L,*s;
    while(pa&&pb){
        if(pa->data<pb->data){
            s=(LinkList*)malloc(sizeof(LinkList));
            s->data=pa->data;
            r->next=s;
            r=s;
            pa=pa->next;
        }else{
            s=(LinkList*)malloc(sizeof(LinkList));
            s->data=pb->data;
            r->next=s;
            r=s;
            pb=pb->next;
        }
    }
    while(pa){
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=pa->data;
        r->next=s;
        r=s;
        pa=pa->next;
    }
    while(pb){
        s=(LinkList*)malloc(sizeof(LinkList));
        s->data=pb->data;
        r->next=s;
        r=s;
        pb=pb->next;
    }
    r->next=NULL;


}
int main()
{
    LinkList *L,*LA,*LB;
    int i,lena,lenb;
    scanf("%d",&lena);
    int numa[lena];
    for(i=0;i<lena;i++){
        scanf("%d",&numa[i]);
    }
    create(LA,numa,lena);

    scanf("%d",&lenb);
    int numb[lenb];
    for(i=0;i<lenb;i++){
        scanf("%d",&numb[i]);
    }
    create(LB,numb,lenb);

    un(L,LA,LB);


    print(L);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/zhaohuan1996/p/12545172.html