函数接口定义:
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( )
{
int i = 0;
LNode *s,*p,*q;
s = (LNode *)malloc(sizeof(LNode));
s->data = NULL;
s->next = NULL;
p = s;
while(i != -1)
{
q = (LNode *)malloc(sizeof(LNode));
q->next = NULL;
scanf("%d",&q->data);
if(q->data == -1)
{
free(q);
break;
}
p->next = q;
p = q;
}
return s;
}//按顺序依次读入元素,生成一个带头结点的单链表,表中元素值排列顺序与输入顺序一致,若输入-1,则创建链表结束(链表中不包含-1)。此处要求元素值按非递减顺序录入
LinkList Merge( LinkList L1, LinkList L2 )
{
LNode *pa,*pb,*pc,*L;
pa = L1 -> next;pb = L2 ->next;
L = (LNode *)malloc(sizeof(LNode));
L = L1;
pc = L;
if(pa == NULL && pb == NULL)
{
return NULL;
}
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(pa)
pc->next = pa;
else
pc->next = pb;
free(L2);
return L;
}
//合并L1与L2。已知L1与L2中的元素非递减排列,要求合并后的单链表中元素也按值非递减排列。