编程要求 根据提示,在右侧编辑器补充代码,完成函数void mergeTwoLists(LinkNode* &L, LinkNode L1, LinkNode L2),该函数的功能是:合并两个有序链表。L1和L2为不带附加头结点的单链表的头指针。L为合并后的单链表的头指针。
测试说明 平台会对你编写的代码进行测试:
测试输入: 3 3 1 2 4 1 3 4 预期输出: 1 1 2 3 4 4
提示 两个链表的节点数目范围是 [1, 1000] L1 和 L2 均按 非递减顺序 排列。
#include "linklist.h"
/**
* 合并两个有序链表。L1和L2为不带附加头结点的单链表的头指针。
* L为合并后的单链表的头指针。
*/
void mergeTwoLists(LinkNode* &L, LinkNode *L1, LinkNode* L2)
{
//请在下面编写代码
/******************Begin******************/
LinkNode *p1=L1,*p2=L2,*r,*s;
L=(LinkNode*)malloc(sizeof(LinkNode));
r=L;
while(p1!=NULL&&p2!=NULL)
{
if(p1->data<p2->data)
{
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=p1->data;
r->next=s;
r=s;
p1=p1->next;
}
else
{
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=p2->data;
r->next=s;
r=s;
p2=p2->next;
}
}
while(p1!=NULL)
{
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=p1->data;
r->next=s;
r=s;
p1=p1->next;
}
while(p2!=NULL)
{
s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=p2->data;
r->next=s;
r=s;
p2=p2->next;
}
r->next=NULL;
L=L->next;
/*******************End*******************/
}
//尾插法建立不带附加头结点的单链表
void CreateListR(LinkNode *&L, ElemType a[], int n)
{
LinkNode *s, *r;
L = (LinkNode *)malloc(sizeof(LinkNode)); //创建头结点
L->data = a[0];
L->next = NULL;
r = L; //r始终指向终端结点,开始时指向头结点
for (int i = 1; i < n; i++)
{
s = (LinkNode *)malloc(sizeof(LinkNode)); //创建新结点s
s->data = a[i];
r->next = s; //将结点s插入结点r之后
r = s;
}
r->next = NULL; //单链表收尾
}
//输出单链表
void DispList(LinkNode *L)
{
LinkNode *p = L;
while (p != NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}