【问题描述】
两个非降序链表的并集,例如将链表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<iostream>
#include<cstdio>
#include<cstdlib>
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;
}
}
}
}
原文:https://www.cnblogs.com/reashal/p/14692384.html