第1关:两个递增有序链表合并为一个递增有序链表
任务描述
本关任务:编写一个递增有序链表的合并程序。
相关知识
为了完成本关任务,你需要掌握:1.链表的创建,2.链表的合并。
递增有序的问题
需要单独考虑两个链表节点数据相等的情况?
编程要求
根据提示,在右侧编辑器补充代码,得到一个合并后的递增有序链表。
测试说明
平台会对你编写的代码进行测试:
测试输入:第一行分别是两个链表的数据长度,接下来两行分别代表两个链表的数据元素 5 3 1 2 3 4 5 1 2 6 预期输出: 1 2 3 4 5 6
#include<iostream>
#include<fstream>
using namespace std;
#define ERROR 0
typedef struct LNode //定义单链表
{
int data;
struct LNode *next;
} LNode, *LinkList;
int num_a, num_b;
void InitList_L(LinkList &L) //创建单链表
{
L = new LNode;
L->next = NULL;
}
void input(LinkList &L, int n) //依次往单链表L里输入数据
{
int i;
LNode *p, *r;
r = L;
while (n --)
{
p = new LNode;
cin >> p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void output(LinkList L) //依次输出单链表里的每个元素
{
int i = 0;
LNode *p;
p = L->next;
while (p) {
if (i)
cout << " ";
cout << p->data;
p = p->next;
i = 1;
}
}
void MergeList_L(LinkList &LA, LinkList &LB, LinkList &LC) //算法设计1
{
//已知单链表LA和LB的元素按值递增排列
//归并LA和LB得到新的单链表LC,LC的元素也按值递增排列,不允许有重复数据
/*******************************Begin***************************/
LinkList pa,pb,pc;
pa = LA->next;
pb = LB->next;
pc = LC = LA;
while(pa && pb){
if(pa->data < pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
}
if(pa->data == pb->data){
pc->next = pa;
pc = pa;
pa = pa->next;
pb = pb->next;
}
else if(pa->data > pb->data){
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa?pa:pb;
/********************************End****************************/
} //MergeList_L()
int main()
{
LinkList La, Lb, Lc;
scanf("%d %d", &num_a, &num_b);
InitList_L(La); //La表的创建
input(La, num_a); //依次往单链表La里输入数据
InitList_L(Lb); //Lb表的创建
input(Lb, num_b); //依次往单链表La里输入数据
Init