已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出两个集合A和B 的差集(即仅由在A中出现而不在B中出现的元素所构成的集合),并以同样的形式存储,同时返回该集合的元素个数。
void Difference(LinkedList A,B,*n)
∥A和B均是带头结点的递增有序的单链表,分别存储了一个集合,本算法求两集合的差集,存储于单链表A中,*n是结果集合中元素个数,调用时为0
{p=A->next; ∥p和q分别是链表A和B的工作指针。
q=B->next; pre=A; ∥pre为A中p所指结点的前驱结点的指针。
while(p!=null && q!=null)
if(p->data<q->data){pre=p;p=p->next;*n++;} ∥ A链表中当前结点指针后移。
else if(p->data>q->data)q=q->next; ∥B链表中当前结点指针后移。
else {pre->next=p->next; ∥处理A,B中元素值相同的结点,应删除。
u=p; p=p->next; delete u;} ∥删除结点
谁小移谁,相同就删