题目描述
分别输入两个有序的整数序列(分别包含M和N个数据),建立两个有序的单链表,将这两个有序单链表合并成为一个大的有序单链表,并依次输出合并后的单链表数据。
输入
第一行输入M与N的值;
第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。
第二行依次输入M个有序的整数;
第三行依次输入N个有序的整数。
输出
输出合并后的单链表所包含的M+N个有序的整数。
示例输入
6 5 1 23 26 45 66 99 14 21 28 50 100
示例输出
1 14 21 23 26 28 45 50 66 99 100
#include<stdio.h> #include<stdlib.h> struct node { int date; struct node *next; }; struct node *p,*q,*head1,*head2,*tail1,*tail2; int main() { int m,n,i,j; scanf("%d %d",&m,&n); head1=(struct node *)malloc(sizeof(struct node )*1); head2=(struct node *)malloc(sizeof(struct node )*1); head1->next=NULL; head2->next=NULL; tail1=head1; tail2=head2; while(m--) { p=(struct node *)malloc(sizeof(struct node )*1); scanf("%d",&p->date); p->next=NULL; tail1->next=p; tail1=p; } while(n--) { q=(struct node *)malloc(sizeof(struct node )*1); scanf("%d",&q->date); q->next=NULL; tail2->next=q; tail2=q; } tail1=head1->next; tail2=head2->next; free(head2); p=head1; while(tail1&&tail2) { if(tail1->date>tail2->date) { p->next=tail2; p=tail2; tail2=tail2->next; } else { p->next=tail1; p=tail1; tail1=tail1->next; } if(tail1) p->next=tail1; else if(tail2) p->next=tail2; } q=head1->next; while(q!=NULL) { printf("%d",q->date); if(q->next!=NULL) printf(" "); q=q->next; } return 0; }