您的位置:首页 > 职场人生

面试题92:两个链表集合做差

2016-06-08 15:34 267 查看
题目:
已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。例如,若集合A={5,10,20,15,25,30},集合B={5,15,35,25},完成计算后A={10,20,30}。

思路:

遍历链表A一次,遍历链表B多次。

时间复杂度:

O(n1*n2)

实现如下:

struct node
{
int elem;
node* next;
};

void difference(node** LA, node* LB)
{
node *pa, *pb, *pre, *q;
pre = NULL;
pa = *LA;
while (pa)
{
pb = LB;
while (pb&&pb->elem!=pa->elem) //2
pb = pb->next;
if (pb) //3
{
if (!pre)//要删除的是第一个结点
*LA = pa->next; //4
else
pre->next= pa->next; //5
q = pa;
pa = pa->next;
free(q);
}
else
{
pre = pa; //6
pa = pa->next;
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: