题目链接:PTA | 程序设计类实验辅助教学平台 (pintia.cn)
已知两个非降序链表序列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
Python (python3)
时间限制
1500 ms
内存限制
256 MB
其他编译器
时间限制
1500 ms
内存限制
128 MB
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
int data;
struct node* next;
}node,*List;
void create(List &l){
List p,q;
l=(node*)malloc(sizeof(node));
l->next=NULL;
q=l;
int d;
while(scanf("%d",&d)&&d!=-1){
p=(node*)malloc(sizeof(node));
p->data=d;
q->next=p;
q=q->next;
p->next=NULL;
}
}
void merge(List &A,List &B,List &C){
List pa=A->next;
List pb=B->next;
List pc;
pc=A;
C=pc;
if(pa==NULL&&pb==NULL){
C=NULL;
}else{
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;
pc=pa;
pa=pa->next;
}else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
if(pc->next==pa){
pc->next=pb;
}else{
pc->next=pa;
}
}
free(B);
B=NULL;
}
}
int main(){
List A,B,C;
create(A);
create(B);
merge(A,B,C);
if(C==NULL){
printf("NULL");
}else{
List p=C->next;
while(p->next){
printf("%d ",p->data);
p=p->next;
}
printf("%d",p->data);
}
return 0;
}
若代码有误还请指正!