1.在原来的链表上更改
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;
}*LinkList, LNode;
int Init(LinkList& L)
{//初始化一个单链表
L = new LNode;
L->next = NULL;
return 1;
}
int Tail_insert(LinkList& L)
{
LNode* p, * q;
q = L;
int a;
cout << ">:";
cin >> a;
while (a != 99)
{//尾插法创建单链表,当输入99时停止插入
p = new LNode;
p->data = a;
q->next = p;
q = p;
cout << ">:";
cin >> a;
}
q->next = NULL;
return 1;
}
int Different_(LinkList& L1, LinkList& L2)
{//因为是A中存在,B中不存在,所以直接在A中修改
LNode* p, * q;
p = L1;//因为是判断p->next是否为空,所以将p的值赋值为L1的表头
q = L2->next;
while (p->next!= NULL && q!= NULL)
{//如果p->next为空,则说明p已经比较完了,直接返回就可以
//如果q为空,则p中为比较的也不需要比较了,直接返回就可以
if (p->next->data < q->data)
{
p = p->next;
}
else if (p->next->data == q->data)
{//如果p->next->data ==q->data ,则说明p->next和q相等,则将p->next赋值为p->next->next就无法访问到p->next了,就相当于删除了p->next
p->next = p->next->next;
q = q->next;
}
else
p = p->next;
}
return 1;
}
int main()
{
LinkList T1;
LinkList T2;
if (Init(T1))
{
cout << "A链表初始化成功" << endl;
}
if (Tail_insert(T1))
{
cout << "A链表插入成功" << endl;
}
if (Init(T2))
{
cout << "B链表初始化成功" << endl;
}
if (Tail_insert(T2))
{
cout << "B链表插入成功" << endl;
}
if (Different_(T1, T2))
{
LNode* p = T1->next;
while (p != NULL)
{
cout << p->data << " ";
p = p->next;
}
}
system("pause");
return 1;
}
开始A链表
开始B链表
最后A链表
最后结果为
2.新建一个链表
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode* next;
}*LinkList, LNode;
int Init(LinkList& L)
{
L = new LNode;
L->next = NULL;
return 1;
}
int Deffrient(LinkList& L1, LinkList& L2)
{
int count = 0;
LinkList B;
LNode* p = new LNode;
p = L1->next;
LNode* q = new LNode;
q = L2->next;
if (Init(B))
{
LNode* r = new LNode;
r = B;
while (p != NULL && q != NULL)
{
if (p->data < q->data)
{
LNode* s = new LNode;
s->data = p->data;
s->next = NULL;
r->next = s;
r = s;
p = p->next;
}
else if (p->data == q->data)
{
p = p->next;
q = q->next;
}
else
q = q->next;
}
if (q == NULL)
{
LNode* s = p;
r->next = s;
delete s;
}
}
delete p;
p = new LNode;
p = B->next;
while (p!= NULL)
{
cout << p->data << " ";
p = p->next;
count++;
}
cout << endl;
return count;
}
int main()
{
int a1[7] = { 1,2,3,4,5,6,7};
int a2[7] = { 3,4,6,8,9,10,11};
LinkList T1;
if (Init(T1))
{
cout << "初始化成功" << endl;
}
LNode* q = T1;
for (int i = 0; i <= 6; i++)
{
LNode* p = new LNode;
p->data = a1[i];
p->next = NULL;
q->next = p;
q = p;
}
cout << "T1插入成功" << endl;
delete q;
LinkList T2;
if (Init(T2))
{
cout << "初始化成功" << endl;
}
q = new LNode;
q = T2;
for (int i = 0; i <= 6; i++)
{
LNode* p = new LNode;
p->data = a2[i];
p->next = NULL;
q->next = p;
q = p;
}
cout << "T2插入成功" << endl;
int count = Deffrient(T1, T2);
cout << "差集的个数为:" << count;
system("pause");
return 1;
}