初步实现
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;
int num;
}LNode,*LinkList;
LinkList& createList(LinkList& L, int n) //创建链表
{
L = new LNode;
L->next = NULL;
L->num = 0;
LinkList r = L;
for (int i = 0; i < n; i++)
{
LNode *p = new LNode;
cin >> p->data;
p->next = NULL;
r->next=p;
r = p;
L->num++;
}
return L;
}
void showList(LinkList L) //输出链表
{
if (L->num == 0)
cout<<"链表为空!"<<endl;
else
{
int q = L->num;
for (int i = 0; i < q; i++)
{
if (L->next->data != NULL)
{
cout << L->next->data << " ";
L = L->next;
}
}
cout << endl;
}
}
LinkList& connectList(LinkList L1,LinkList L2) //连接两个链表
{
LinkList L3;
LinkList pa = L1->next;
LinkList pb = L2->next;
L3 = L1;
LinkList pc = L3;
LinkList temp = NULL;
while (pa && pb)
{
if (pa->data <= pb->data)
{
if (pa->data < pb->data)
{
pc->next = pa;
pc = pa;
pa = pa->next;
}
else
{
L2->num--;
temp = pb;
pb = pb->next;
delete(temp);
}
}
else
{
pc->next = pb;
pc = pb;
pb = pb->next;
}
}
pc->next = pa ? pa : pb;
L3->num = L1->num+L2->num;
return L3;
}
int main()
{
LinkList L1,L2;
int n1, n2;
cout << "请输入第一个递增链表的长度:" << endl;
cin >> n1;
cout << "请输入第一个递增链表的内容:" << endl;
L1=createList(L1,n1);
cout << "请输入第二个递增链表的长度:" << endl;
cin >> n2;
cout << "请输入第二个递增链表的内容:" << endl;
L2 = createList(L2, n2);
cout << "第一个链表为:" << endl;
showList(L1);
cout << "第二个链表为:" << endl;
showList(L2);
LinkList L3 = connectList(L1, L2);
cout << "合并后并且去除重复值后的递增链表为:" << endl;
showList(L3);
return 0;
}