已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。
输入格式:
输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。
输出格式:
在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL
。
输入样例:
1 3 5 -1
2 4 6 8 10 -1
输出样例:
1 2 3 4 5 6 8 10
代码长度限制
16 KB
时间限制
1500 ms
内存限制
128 MB
#include <iostream>
using namespace std;
struct Link{
int data;
struct Link *next;
};
void Linkout(Link *head){
struct Link *pre=head->next;
if(pre->data==-1){
cout<<"NULL";
return;
}
cout<<pre->data;
for(int i=0;;i++){
pre=pre->next;
if(pre==NULL){
break;
}
cout<<" "<<pre->data;
}
return;
}
Link* Linkadd(Link *head,int data){
struct Link *pre=head;
struct Link *p=new Link;
int i=0;
for(i=0;;i++){
if(pre->next==NULL){
pre->next=p;
p->data=data;
p->next=NULL;
break;
}
else if(pre->next->data >= data){
p->next=pre->next;
p->data=data;
pre->next=p;
break;
}
pre=pre->next;
}
return p;
}
int main(){
int i=0,t=0,x=0;
struct Link *head=new Link;
struct Link *pre=new Link;
struct Link *temp=head;
head->next=pre;
pre->next=NULL,pre->data=-1;
for(i=0;;i++){
cin>>t;
if(t==-1)
break;
else{
struct Link *p=new Link;
if(x==0){
pre->data=t;
x=1;
}
else{
p->data=t;
pre->next=p;
p->next=NULL;
pre=p;
}
}
}
for(i=0;;i++){
cin>>t;
if(t==-1)
break;
else{
temp=Linkadd(temp,t);
}
}
Linkout(head);
}