时间限制:1秒
空间限制:32768K
请编写一段代码,实现两个单向有序链表的合并
输入描述:
第一行一个链表,如1 2 3 4 5 第二行一个链表,如2 3 4 5 6
输出描述:
输出:1 2 2 3 3 4 4 5 5 6
输入例子1:
1 2 3 4 5 2 3 4 5 6
输出例子1:
1 2 2 3 3 4 4 5 5 6
#include<bits/stdc++.h>
using namespace std;
int main()
{
char aa[100000];
char bb[100000];
int a[100000];
int b[100000];
char t;
int lena = 0;
int lenb = 0;
scanf("%[^\n]",aa);
getchar();
scanf("%[^\n]",bb);
int len;
len = strlen(aa);
for(int i =0 ; i<len;i++)
{
if(aa[i]>='0'&&aa[i]<='9')
{
int sum = aa[i]-'0';
for(int j = i+1;j<len;j++)
{
if(aa[j]>='0'&&aa[j]<='9')
{
sum = sum*10+(aa[j]-'0');
}else
{
i = j;
break;
}
if(j==len-1)
{
i = len-1;
break;
}
}
a[lena++] = sum;
}
}
len = strlen(bb);
for(int i =0 ; i<len;i++)
{
if(bb[i]>='0'&&bb[i]<='9')
{
int sum = bb[i]-'0';
for(int j = i+1;j<len;j++)
{
if(bb[j]>='0'&&bb[j]<='9')
{
sum = sum*10+(bb[j]-'0');
}else
{
i = j;
break;
}
if(j==len-1)
{
i=len-1;
break;
}
}
b[lenb++] = sum;
}
}
/*for(int i = 0 ; i<lena;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
for(int i = 0; i<lenb;i++)
{
cout<<b[i]<<" ";
}
cout<<endl;*/
int i = 0;
int j = 0;
int fg = 0;
int tt = 0;
while(true)
{
if(i>=lena)fg = 1;
if(j>=lenb)fg = 2;
if(i>=lena||j>=lenb)break;
if(tt==0)
{
tt++;
}else cout<<" ";
if(a[i]>b[j])
{
cout<<b[j];
j++;
}else
{
cout<<a[i];
i++;
}
}
if(fg == 1)for(int m = j;m<lenb;m++)cout<<" "<<b[m];
if(fg == 2)for(int m = i;m<lena;m++)cout<<" "<<a[m];
return 0;
}