任务描述
本关任务:给定两个递增的整数序列A和B,利用链表表示序列A和B,将A和B合并为一个递增的有序序列C,序列C不允许有重复的数据。要求空间复杂度为O(1)。
编程要求
输入
多组数据,每组数据有三行,第一行为序列A和B的长度n和m,第二行为序列A的n个元素,第三行为序列B的m个元素(元素之间用空格分隔)。n=0且m=0时输入结束。
输出
对于每组数据输出一行,为合并后的序列,每个数据之间用空格分隔。
测试说明
平台会对你编写的代码进行测试:文章来源:https://www.toymoban.com/news/detail-744494.html
文章来源地址https://www.toymoban.com/news/detail-744494.html
代码
#include <iostream>
#define OK 1
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;
}LNode, * LinkList;
void CreateList_R(LinkList& L, int n)
{//后插法创建单链表
L=new LNode;
L->next=NULL;
int i;
LinkList p=L;
for(i=1;i<=n;i++){
LinkList s;
s=new LNode;
scanf("%d",&s->data);
s->next=NULL;
p->next=s;
p=s;
}
}
int MergeList(LinkList& LA, LinkList& LB)
{//求基于链表的两个递增有序序列的合并 存入LA
LNode *r1 = LA -> next;
LNode *r2 = LB -> next;
LNode *r3 = LA;
while (r1 && r2)
{
if (r1 -> data < r2 -> data)
{
r3 -> next = r1;
r3 = r1;
r1 = r1 -> next;
}
else if (r1 -> data == r2 -> data)
{
r3 -> next = r1;
r3 = r1;
r1 = r1 -> next;
r2 = r2 -> next;
}
else
{
r3 -> next = r2;
r3 = r2;
r2 = r2 -> next;
}
}
if (r1) // 如果还有剩下,则只需要直接连接就好,不需要遍历
r3 -> next = r1;
if (r2)
r3 -> next = r2;
// 也可以用三目运算符进行骚操作
// r3 -> next = r1 ? r1 : r2;
delete LB;
}
到了这里,关于第21关:基于链表的两个递增有序序列的合并的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!