链表的合并与分解

第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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值