函数接口定义:
LinkList Read( ); //按顺序依次读入元素,生成一个带头结点的单链表,表中元素值排列顺序与输入顺序一致,若输入-1,则创建链表结束(链表中不包含-1)。此处要求元素值按非递减顺序录入
LinkList Merge( LinkList L1, LinkList L2 );
//合并L1与L2。已知L1与L2中的元素非递减排列,要求合并后的单链表中元素也按值非递减排列。
参数 L1
和 L2
是两个有序链表(均按照非递减排列),均为带头结点的单链表。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct Node {
ElemType data;
struct Node *next;
}LNode,*LinkList;
LinkList Read( );
LinkList Merge( LinkList L1, LinkList L2 );
int main()
{
LinkList L1, L2, L,p;
L1 = Read();
L2 = Read();
L = Merge(L1, L2);
if(!L)
{
printf("empty");
return 0;
}
p=L->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
return 0;
}
/* 请在这里填写答案 */
输入样例:
1 3 5 8 -1
2 6 8 -1
输出样例:
1 2 3 5 6 8 8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
LinkList Read( )
//按顺序依次读入元素,生成一个带头结点的单链表,表中元素值排列顺序与输入顺序一致,若输入-1,则创建链表结束(链表中不包含-1)。此处要求元素值按非递减顺序录入
{
LinkList head,p,q;
head=NULL;
int a;
scanf("%d",&a);
while(a!=-1)
{
p=(LinkList)malloc(sizeof(LinkList));
p->data=a;
p->next=NULL;
if(head==NULL) head=p;
else q->next=p;
q=p;
scanf("%d",&a);
}
return head;
}
LinkList Merge( LinkList L1, LinkList L2 )
//合并L1与L2。已知L1与L2中的元素非递减排列,要求合并后的单链表中元素也按值非递减排列。
{
LinkList p,q,t,m;
t=(LinkList)malloc(sizeof(LinkList));
t->next=NULL;
p=t;
if(L1==NULL && L2==NULL) return NULL;//判断是否为空的字符串
while(L1 && L2)
{
if(L1->data<L2->data)
{
t->next=L1;
L1=L1->next;
t=t->next;
}
else
{
t->next=L2;
L2=L2->next;
t=t->next;
}
}
t->next=L1? L1:L2;//将没有串联完的代码接在后面
return p;
}