合并链表
【问题描述】
两个非降序链表的并集,例如将链表1->2->3 和 2->3->5 并为 1->2->3->5,只能输出结果,不能修改两个链表的数据。
【输入形式】
第一行为第一个链表的各结点值,以空格分隔。
第二行为第二个链表的各结点值,以空格分隔。
【输出形式】
合并好的链表,以非降序排列,值与值之间以空格分隔。
【样例输入】
4 7 10 34
1 4 6 29 34 34 52
【样例输出】
1 4 6 7 10 29 34 52
【评分标准】
要使用链表实现,否则不能得分。
#include#include #include using namespace std; string s1,s2; int num1,num2; int IsF1,IsF2; int z1,z2; int sum1,sum2; int num[9999]; int last; typedef struct Node { int x; Node *next; }Node1,Node2; int main() { getline(cin,s1); Node1 *head1=(Node1*)malloc(sizeof(Node1)); head1->next=NULL; Node1 *ne1,*tail1=head1; Node2 *head2=(Node2*)malloc(sizeof(Node2)); head2->next=NULL; Node2 *ne2,*tail2=head2; while(1) { if(s1[z1]=='\0') { ne1=(Node1*)malloc(sizeof(Node1)); ne1->x=num1; tail1->next=ne1; tail1=ne1; break; } if(s1[z1]>='0'&&s1[z1]<='9') { IsF1=1; num1*=10; num1+=s1[z1]-'0'; } if(s1[z1]==' ') { if (IsF1) { ne1=(Node1*)malloc(sizeof(Node1)); ne1->x=num1; tail1->next=ne1; tail1=ne1; } num1=0; } z1++; } tail1->next=NULL; getline(cin,s2); while(1) { if(s2[z2]=='\0') { ne2=(Node2*)malloc(sizeof(Node2)); ne2->x=num2; tail2->next=ne2; tail2=ne2; break; } if(s2[z2]>='0'&&s2[z2]<='9') { IsF2=1; num2*=10; num2+=s2[z2]-'0'; } if(s2[z2]==' ') { if (IsF2) { ne2=(Node2*)malloc(sizeof(Node2)); ne2->x=num2; tail2->next=ne2; tail2=ne2; } num2=0; } z2++; } tail2->next=NULL; Node1 *i=head1->next; Node2 *j=head2->next; while(1) { if(i==NULL) { for(Node2 *o=j;o!=NULL;o=o->next) if((o->x)>last) printf("%d ",o->x); break; } else if(j==NULL) { for(Node1 *o=i;o!=NULL;o=o->next) if((o->x)>last) printf("%d ",o->x); break; } else { if(((i->x)<(j->x))) { if((i->x)>last) printf("%d ",i->x); last=i->x; i=i->next; } else if((i->x)>(j->x)) { if((j->x)>last) printf("%d ",j->x); last=j->x; j=j->next; } else { if((j->x)>last) printf("%d ",j->x); last=j->x; i=i->next; j=j->next; } } } }