1-4 两个有序链表序列的合并分数 85
全屏浏览题目
切换布局
作者 DS课程组
单位 浙江大学
已知两个非降序链表序列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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef int ElementType;
typedef struct node {
ElementType data;
struct node *Next;
} *List;
// 创建链表
List CreateList(void) {
int i;
//int n=0;
int val=0;
List pHead = (List)malloc(sizeof(struct node));
List pTail=pHead;
pTail->Next=NULL;
for(i=0;;i++)//输入数据
{
scanf("%d",&val);
if(val<0){
break;
}
List pNew= (List)malloc(sizeof(struct node));
pNew->data=val;
pTail->Next=pNew;
pNew->Next=NULL;
pTail=pNew;}
return pHead;
}
// 打印链表
void PrtList(List L) {
List p = L->Next;
int flag = 1;
while(p)
{
if (flag)
{
flag = 0;
printf("%d",p->data);
}
else
printf(" %d",p->data);
p = p->Next;
}
printf("\n");
}
void sort(List pHead){
int t,i,j;
int len=length_list(pHead);
List p=NULL;
List q=NULL;
for(i=0,p=pHead->Next;i<len;p=p->Next,i++){
for(j=i+1,q=p->Next;j<len;j++,q=q->Next){
if(p->data>q->data){
t=p->data;
p->data=q->data;
q->data=t;
}
}
}
}
int length_list(List A){
int i=0;
List p=A->Next;
while(p){
i++;
p=p->Next;
}
return i;
}
int main(void) {
List A = CreateList();
List B = CreateList();
if(A->Next==NULL&&B->Next==NULL){
printf("NULL");
}
else if(A->Next==NULL&&B->data!=NULL){
sort(A);
PrtList(A);
}
else if(B->Next==NULL&&A->data!=NULL){
sort(B);
PrtList(B);
}
// 找到链表A的最后一个节点
else{
List tmp = A;
while (tmp->Next != NULL) {
tmp = tmp->Next;
}
// 连接A和B,注意链表是带头结点的,连接时要忽略B的头结点,从第一个节点开始
tmp->Next = B->Next;
sort(A);
PrtList(A);}
return 0;
}
