#include <stdio.h>
#include <iostream>
using namespace std;
#include <stdlib.h>
typedef struct LNode
{
int data;
struct LNode *next;
} LNode, *LNodeList;
void InitList_Head(LNodeList &L) // 头插法
{
L = new LNode;
L->data = 0;
L->next = NULL;
for (int i = 0; i < 10; i++)
{
LNodeList s = new LNode;
s->data = i;
s->next = L->next;
L->next = s;
}
}
void InitList_Tear(LNodeList &L) // 尾插法
{
L = new LNode;
// L->data = 0;
LNodeList r = L;
L->next = NULL;
for (int i = 1; i <= 5; i++)
{
LNodeList s = new LNode;
printf("请输入%d个关键字:", i);
scanf("%d", &s->data);
// cin >> s->data;
// s->data = i;
s->next = nullptr;
r->next = s;
r = s;
}
}
void printfList(LNodeList L) // 打印单链表
{
LNodeList q = L->next;
int i = 0;
while (q != NULL)
{
printf("%d ", q->data);
i++;
q = q->next;
}
printf("单链表长度:%d\n", i);
}
void difference(LNodeList &L1, LNodeList &L2, int &num)
{
LNodeList p1 = L1->next;
LNodeList p2 = L2->next;
LNodeList r = L1;
LNodeList q;
L1->next = NULL;
while (p1)
{
if (p2 == NULL)
{
r->next = p1;
r = p1;
p1 = p1->next;
r->next = NULL;
num++;
return;
}
else if (p1->data == p2->data)
{
q = p1;
p1 = p1->next;
delete q;
q = p2;
p2 = p2->next;
delete q;
}
else if (p1->data < p2->data)
{
r->next = p1;
r = p1;
p1 = p1->next;
r->next = NULL;
num++;
}
else if (p1->data > p2->data)
{
q = p2;
p2 = p2->next;
delete q;
}
}
}
int main()
{
int number = 0;
LNodeList A;
LNodeList B;
// InitList_Head(myList1); // 头插法
InitList_Tear(A); // 尾插法
printfList(A);
InitList_Tear(B); // 尾插法
printfList(B);
difference(A, B, number);
printfList(A);
printf("\n集合中有%d个元素!!", number);
}
运行结果如下