题意
已知指针ha和hb分别指向两个单链表的头结点,并且已知两个链表的长度分别为m和n。试写一算法将这两个链表连接在一起(即令其中一个表的首元结点连在另一个表的最后一个结点之后)。假设指针hc指向链接后的链表的头结点。
#include <iostream>
using namespace std;
int n,m;
typedef struct LNode
{
int data;
LNode *next;
}LNode, *LinkList;
//后插法创建链表
void CreateList_last(LinkList &L,int n1)
{
LinkList r;
L=new LNode;
L->next=NULL;
r=L;
cout<<"每个节点的数值:"<<endl;
for(int i=0;i<n1;i++)
{
LinkList p = new LNode;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
LinkList connect(LinkList La,LinkList Lb)
{
LinkList Lc,p,q;
Lc=new LNode;
if(n>m)
{
p=La->next;
Lc->next=p;
q=Lb->next;
while(p->next)
p=p->next;
p->next=q;
}
else
{
p=Lb->next;
Lc->next=p;
q=La->next;
while(p->next)
{
p=p->next;
}
p->next = q;
}
return Lc;
}
void Print_LinkList(LinkList &L)
{
LNode *p=L->next;
cout<<"链表中元素依次为:";
while(p)
{
cout<<p->data<<" ";
p=p->next;
}
}
int main()
{
LinkList La,Lb,Lc;
cout << "输入表La的长度:";
cin >> n;
CreateList_last(La,n);
Print_LinkList(La);
cout << endl;
cout << "输入表Lb的长度:";
cin >> m;
CreateList_last(Lb,m);
Print_LinkList(Lb);
cout<< endl;
Lc=connect(La,Lb);
cout << "Lc为:" << endl;
Print_LinkList(Lc);
return 0;
}