- 编写一个程序,实现以下功能,L1=(x1,x2,…,xn),L2=(y1,y2,…,ym),它们是两个线性表(L1和L2中的值都不重复),采用带头结点的单链表存储,设计一个算法合并L1和L2,结果存放在线性表L3中,要求如下:
L3=(x1,y1,x2,y2,…,xm,ym,xm+1,…,xn) 当m£n时
L3=(x1,y1,x2,y2,…,xn,yn,yn+1,…,ym) 当m>n时
L3仍采用单链表存储,算法的空间复杂度为O(1)。
(1)建立两个单链表L1和L2并输出。
(2)将合并L1和L2为L3。
(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, 价格公道童叟无欺