编写一个程序,实现以下功能,L1=(x1,x2,…,xn),L2=(y1,y2,…,ym),它们是两个线性表(L1和L2中的值都不重复),采用带头结点的单链表存储,设计一个算法合并L1和L2,结果存放

  1. 编写一个程序,实现以下功能,L1=(x1,x2xn),L2=(y1y2ym),它们是两个线性表(L1和L2中的值都不重复),采用带头结点的单链表存储,设计一个算法合并L1和L2,结果存放在线性表L3中,要求如下:

L3=(x1y1x2y2xmymxm+1xn)      m£n

L3=(x1y1x2y2xnynyn+1ym)       当m>n

L3仍采用单链表存储,算法的空间复杂度为O(1)。

(1)建立两个单链表L1L2并输出。

(2)将合并L1和L2L3

(3)输出单链表L3


#include<iostream>
using namespace std;
typedef struct Lnode
{
	int data;
	struct Lnode *next;
}Lnode, *LinkList;
void ShowList(LinkList L);
LinkList CreatLinkList(int n)/*创建链表*/
{
	int e;
	LinkList L, head;
	Lnode *p;
	L = new Lnode;
	L->next = NULL;
	head = L;
	for (int i = 0; i < n; i++)
	{
		cin >> e;
		p = new Lnode;
		p->data = e;
		p->next = NULL;
		L->next = p;
		L = p;
	}
	return head;
}
void ShowList(LinkList L)/*输出链表*/
{
	LinkList p;
	p = L->next;
	while (p)
	{
		cout << p->data << " ";
		p = p->next;
	}
	cout << endl;
}
LinkList MergeLinkList(LinkList &LA, LinkList &LB)/*合并链表L1和L2*/
{
	LinkList LC;
	Lnode *pa, *pb, *pc;
	pa = LA->next;
	pb = LB->next;
	LC = LA;
	pc = LC;
	while (pa&&pb)
	{
		pc->next = pa;
		pc = pa;
		pa = pa->next;
		pc->next = pb;
		pc = pb;
		pb = pb->next;
	}
	pc->next = pa ? pa : pb;/*if(pa)pc->next=pa;else pc->next=pb;*/
	free(LB);
	return LA;
}
int main()
{
	LinkList L1, L2, L3;
	int num1, num2;
	cout << "请输入L1中元素的个数:";
	cin >> num1;
	L1 = CreatLinkList(num1);
	cout << "请输入L2中元素的个数:";
	cin >> num2;
	L2 = CreatLinkList(num2);
	cout << "表L1为:";
	ShowList(L1);
	cout << "表L2为:";
	ShowList(L2);
	L3 = MergeLinkList(L1, L2);
	cout << "表L3为:";
	ShowList(L3);
	return 0;
}


算法思想:


数据结构编程题代写联系QQ1695161915, 价格公道童叟无欺

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值