已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。
程序员文章站
2024-02-03 16:53:10
...
题目:已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。
思路:求交集就是求两条链具有的相同元素的结点,A和B链结点一一比较,相同的A保留,B删除结点,不相同结点,由于是递增链,小的元素已经没有再比较的必要了,删去,当其中一条链走到结尾时,比较就结束了,只需把没有走到尾的链剩余结点清除即可。
void MergeList(Linklist& L1, Linklist& L2)
{//都是带头结点的链表,L1为A链,L2为B链
Linklist L3, p1, p2, p3, q;
p1 = L1->next;
p2 = L2->next;
L3 = L1;//使用第一条链的头结点
p3 = L3;
while (p1 && p2)//只要一条链到尾就跳出
{
if (p1->elem = p2->elem)//相等保留
{
p3->next = p1;
p3 = p1;
p1 = p1->next;
q = p2;//第二条链删除一个节点
p2 = p2->next;
delete q;
}
//不管那条链,小的元素对应节点删掉
else if (p1->elem < p2->elem)
{
q = p1;
p1 = p1->next;
delete q;
}
else
{
q = p2;
p2 = p2->next;
delete q;
}
}
//把剩余的节点清空
while (p1)
{
q = p1;
p1 = p1->next;
delete q;
}
while (p2)
{
q = p2;
p2 = p2->next;
delete q;
}
p3->next = NULL;//把新链尾巴置NULL,一定要有,不然在其他操作中报错
}
初学数据结构,把自己做的一些题目记录下来。
上一篇: 单链表操作模拟系统(12种功能)
推荐阅读
-
已知两个链表A和B分别表示两个集合,其元素递增排列。请设计算法求出A与B的交集,并存放于A链表中。
-
已知两个单链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A和B的交集,并存放于A链表中。
-
已知两个链表A和B分别表示两个集合, 其元素递增排列. 设计一个算法, 求出A与B的交集, 并存放在C链表中
-
已知两个链表A和B分别表示两个集合,其元素递增排列。请设计一个算法,用于求出A与B的交集,并存放在A链表中。
-
已知两个链表A和B分别表示两个集合, 其元素递增排列. 设计算法求出两个集合A和B的差集(即仅由在A中出现而不在B中出现的元素所构成的集合), 结果存放在链表A中, 同时返回所求差集中元素的个数