/* 将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 */ #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; }