代码语言:javascript复制
#include <iostream>
#include <string>
using namespace std;
typedef struct LNode
{
int date; //节点的数据域
struct LNode *next; //节点的指针域
}LNode,*LinkList; // LinkList 为指向结构体LNode的指针类型
void mergelinklist(LinkList La,LinkList Lb,LinkList &Lc)
{
LinkList p,q,r;
p = La->next; //p指向la的第一个元素
q = Lb->next; //p指向Lb的第二个元素
Lc = La ; //Lc指向La头结点
r = Lc; //r指向Lc的尾部
while(p&&q)
{
if(p->date<=q->date)
{
r->next = p;
r = p;
p = p->next;
}
else
{
r->next = q;
r = q;
q = q->next;
}
}
if(p) r->next = p; //判断p是否仍然存在
else r->next = q;
delete Lb;
}
void listprint_L(LinkList L) //单链表的输出
{
LinkList p;
p = L->next;
while(p)
{
cout<<p->date<<"t";
p = p->next;
}
cout<<endl;
}
void CreateList_R(LinkList &L) //尾插法创建单链表 (尾插法是正序建表)
{
//输入n个元素,建立到头结点的单链表
int n ;
LinkList s, r;
L = new LNode;
L->next = NULL; //先建立一个带头结点的空链表
r = L; //尾指针r指向头结点 (就他自己)
cout<<"请输入元素个数 n: "<<endl;
cin>>n;
cout<<"请依次输入n个元素:"<<endl;
cout<<"前插法创建单链表..."<<endl;
while(n--)
{
s = new LNode ; //生成新结点s
cin>>s->date; //输入元素赋值给新结点的数据域
s->next = NULL;
r->next = s; //将新结点插s插入尾结点*r之后
r = s; //r指向新的尾结点s
}
}
int main()
{
LinkList La,Lb,Lc;
CreateList_R(La);
CreateList_R(Lb);
mergelinklist(La,Lb,Lc);
listprint_L(Lc);
}