【问题描述】
已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
【参考代码】
typedef struct LNode
{
int data;
struct LNode* next;
}LNode, * LinkList;
void Difference(LinkList &La, LinkList &Lb, int &n)
{
LinkList pa, pb, pc, p;
n = 0;
pa = La->next;
pb = Lb->next;
pc = La; //创建c链表
while (pa && pb)
{
if (pa->data < pb->data)
{
pc->next = pa; //插入c中
pc = pa;
pa = pa->next;
n++;
}
else if (pa->data > pb->data)
{
p = pb;
pb = pb->next;
delete pb; //没在a中出现的元素 删除
}
else
{
p = pa;
pa = pa->next;
delete pa;
p = pb;
pb = pb->next;
delete pb; //a,b都出现的元素 删除
}
}
pc->next = NULL;
}
【代码讲解】
本代码针对考研数据结构,代码采用伪代码,主要理解代码逻辑,本题找在a中出现,但在b中不出现的,且都是升序,则找依次找b>a的元素插入。