题目1519:合并两个排序的链表
时间限制:1 秒内存限制:128 兆特殊判题:否提交:1681解决:770
题目描述:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
(hint: 请务必使用链表。)
输入:
输入可能包含多个测试样例,输入以EOF结束。
对于每个测试案例,输入的第一行为两个整数n和m(0<=n<=1000, 0<=m<=1000):n代表将要输入的第一个链表的元素的个数,m代表将要输入的第二个链表的元素的个数。
下面一行包括n个数t(1<=t<=1000000):代表链表一中的元素。接下来一行包含m个元素,s(1<=t<=1000000)。
输出:
对应每个测试案例,
若有结果,输出相应的链表。否则,输出NULL。
样例输入:
5 2
1 3 5 7 9
2 4
0 0
样例输出:
1 2 3 4 5 7 9
NULL
#include<iostream>
#include<stdio.h>
#include<string>
#include<math.h>
#include<map>
#include<vector>
#include<assert.h>
using namespace std;
struct node{
int val;
node *next;
node(int val)
{
this->val=val;
this->next=NULL;
}
node()
{
this->val=0;
this->next=NULL;
}
};
int main()
{
// assert(freopen("text.txt","r",stdin));
int n,m;
cin>>n>>m;
if(n==0&&m==0)
{
cout<<"NULL"<<endl;
return 0;
}
node *fp=new node();
cin>>fp->val;
node *fHead=fp;
for(int i=1;i<n;i++)
{
node *p=new node();
p->next=NULL;
fp->next=p;
fp=p;
}
node *sp=new node();
cin>>sp->val;
node *sHead=sp;
for(int i=1;i<m;i++)
{
node *p=new node();
p->next=NULL;
cin>>p->val;
sp->next=p;
sp=p;
}
fp=fHead;
sp=sHead;
cout<<fp->val<<" "<<sp->val<<endl;
node *rHead=new node();
node *rp=rHead;
node *fNext=NULL,*sNext=NULL;
while(fp&&sp)
{
fNext=fp->next;
sNext=sp->next;
if(fp->val<=sp->val)
{
fp->next=NULL;
rp->next=fp;
rp=fp;
fp=fNext;
}
else
{
sp->next=NULL;;
rp->next=sp;
rp=sp;
sp=sNext;
}
}
if(fp)
rp->next=fp;
if(sp)
rp->next=sp;
rp=rHead->next;
for(int i=0;i<n+m-1;i++)
{
cout<<rp->val<<" ";
rp=rp->next;
}
cout<<rp->val<<endl;
return 0;
}