#include <iostream>
using namespace std;
//结点的定义
typedef struct LNode
{
int data;
LNode *next;
}LNode,*LinkList;
//获取数据
int getdata(LinkList &l,int location)
{
LinkList p=l->next;
int j=1;
while (p&&j<location)
{
p=p->next;
j++;
}
if (!p||j>location)
{
cout<<"错误!"<<endl;
return -1;
}
return p->data;
}
//创建单链表
LinkList CreateLinkList(int n)
{
LinkList List,p,r; //p为用来指向最后插入的那个结点的辅助指针
List=new LNode; //为链表list建立一个头结点
List->next=NULL; //初始化List链表,使其指针域为空
int value;
for (int i=1;i<=n;i++)
{
r=new LNode; //为当前插入的结点创建空间
cout<<"输入第"<<i<<"个元素的数据:";
cin>>value;
r->data=value;
r->next=NULL;
if (List->next==NULL)
{
List->next=r;
}else
{
p->next=r;
}
p=r; //让p指向最后插入的新结点
}
return List;
}
//单链表的合并
LinkList MergeList(LinkList &La,LinkList &Lb) //La和Lb是A,B链表的头指针
{
LinkList pa,pb,pc,Lc;
Lc=new LNode;
pa=La->next; //使pa指向La的当前待比较插入的结点(第一个)
pb=Lb->next;
pc=La; //使La的头结点作为Lc的头结点
Lc=La;
while (pa&&pb)
{
if (pa->data>=pb->data)
{
pc->next=pb;
pc=pb;
pb=pb->next;
}else
{
pc->next=pa;
pc=pa;
pa=pa->next;
}
pc->next=pa? pa:pb; //当A或B链表其中一个为空时,将剩下的全部放到C链表
}
return Lc;
}
void main()
{
LinkList list1=new LNode;
LinkList list2=new LNode;
LinkList list3;
int lengtha;
cout<<"A链表的长度是:";
cin>>lengtha;
/*cout<<endl;*/
cout<<"输入A链表的数据元素:"<<endl;
list1=CreateLinkList(lengtha);
cout<<endl;
int lengthb;
cout<<"B链表的长度是:";
cin>>lengthb;
/*cout<<endl;*/
cout<<"输入B链表的数据元素:"<<endl;
list2=CreateLinkList(lengthb);
cout<<endl;
list3=MergeList(list1,list2);
cout<<"合并后的单链表是:";
for (int i=1;i<=lengtha+lengthb;i++)
{
cout<<getdata(list3,i)<<" ";
}
}
有序单链表的合并
最新推荐文章于 2024-07-06 19:08:33 发布