社区
数据结构与算法
帖子详情
笔试被人BS了,请算法高手还解决链表的交集问题.
wcqgm
2008-10-25 12:13:37
各位兄弟,请为小弟弟看看,被人BS了,心里很难受.也想学习一下:
现有三个单链表A,B和C,其数据都是按从小到大的顺序(数据可能有相同的)来存储的,现要求对它们进行操作,现实A的链表内容为A,B和C的交集(公共部分,没有重复的记录)。同时对A中的其他结点进行释放内容(要求算法的复杂度为O(m+n+p)其中m,n,p分别为A,B,C的长度)
...全文
1022
30
打赏
收藏
笔试被人BS了,请算法高手还解决链表的交集问题.
各位兄弟,请为小弟弟看看,被人BS了,心里很难受.也想学习一下: 现有三个单链表A,B和C,其数据都是按从小到大的顺序(数据可能有相同的)来存储的,现要求对它们进行操作,现实A的链表内容为A,B和C的交集(公共部分,没有重复的记录)。同时对A中的其他结点进行释放内容(要求算法的复杂度为O(m+n+p)其中m,n,p分别为A,B,C的长度)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
30 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lemonrong
2008-11-05
打赏
举报
回复
分析的很清楚,学习了!
ws023
2008-11-03
打赏
举报
回复
归并排序问题~
winingsky
2008-10-31
打赏
举报
回复
用三个指针分别指向三个链表,用一个循环开始啊
tingsky
2008-10-31
打赏
举报
回复
如果以最短链表开始,折半,或者跳跃(步进n)的方式
fengcman
2008-10-31
打赏
举报
回复
这题不难,上面有解了,不再叙述 。 这中东西在普通考研书中应该都有描述
hertz2007
2008-10-30
打赏
举报
回复
确实不需要那么麻烦你。LCS算法针对的是未排序序列。而此题各组序列已排序,因此直接比较就可以了。
catmonkeyxu
2008-10-30
打赏
举报
回复
ls的大哥,这题不用那么麻烦吧
hertz2007
2008-10-30
打赏
举报
回复
最大公共子序列问题,用动态规划方法做。
sxxiaozi
2008-10-30
打赏
举报
回复
参考下set_intersection()函数,根据他的代码思想自己写个实现3个链表交(可以在A上操作)的函数,至于释放空间的话,可以等交完了链表后面的全部释放就可以了
ayu_J
2008-10-27
打赏
举报
回复
算法() //伪代码
{
设置三个指针分别指向三个链表第一个元素;
while(三个元素的指针都不为空)
if(A链表指针指向的元素==B链表指针指向的元素==链表指针指向的元素)
{
A表指针向后移一个;
B、C表把第一个元素释放同时指针都向后移一个;
}
else A、B、C表指针指向的元素都释放并指针都向后移一个;
if(A表指针不为空)A表指针后面的所有元素逐个释放;
if(B表指针不为空)B表指针后面的所有元素逐个释放;
if(C表指针不为空)B表指针后面的所有元素逐个释放;
}
youxia000
2008-10-27
打赏
举报
回复
看来没啥问题了
wzyzb
2008-10-27
打赏
举报
回复
mark jf
wcqgm
2008-10-27
打赏
举报
回复
谢谢各位兄弟,小弟受教了.
绿色夹克衫
2008-10-27
打赏
举报
回复
1
大家给的方法都不错(除了我开头弄成了并集的那个),基本上都是O(m+n+p),也就差写出具体代码了!
我大概写个程序构架吧,lz自己改一改应该就差不多了,也是O(m+n+p)的(用以弥补我开头弄成了并集,误导lz的错误)
while(3个指针都未走到最后)
{
while(p2->data < p1->data)
{
p2 = p2->NextNode;
}
while(p3->data < p1->data)
{
p3 = p3->NextNode;
}
while(p1->data < p2->data 或者 p1->data < p3->data)
{
temp = p1->NextNode;
delete(p1);
p1 = temp;
}
if(p1->data == p2->data == p3->data)
{
p1 = p1->NextNode;
p2 = p2->NextNode;
p3 = p3->NextNode;
}
lastp1 = p1;
while(p1->data == lastp1->data)
{
temp = p1->NextNode;
delete(p1);
p1 = temp;
}
lastp1->NextNode = p1;
}
最后:删除包括p1在内的A后面的所有元素
(希望这次没有啥疏漏)
wuyi8808
2008-10-26
打赏
举报
回复
up
dengqianyi2008
2008-10-26
打赏
举报
回复
iii) 若 pa->data > pc->data, pb++,pc++;转2);
我喜欢这样写:pa->data == pc->data, pb++,pc++,pa++;转2);
不知道行不行
dengqianyi2008
2008-10-26
打赏
举报
回复
好好想下尾巴的算法,差不多就能编写出来了吧?
xuboamei
2008-10-25
打赏
举报
回复
对三个一链表进行一遍遍历,就可以找出来啊,很简单啊
voiceofwind
2008-10-25
打赏
举报
回复
[Quote=引用 4 楼 tailzhou 的回复:]
ls错看成是求并集了;
1) 指针pa,pb,pc分别指向a,b,c的第一个节点;
2) 比较pb->data与pc->data;
a)若pb==NULL or pc==NULL,删除pa指向的节点,以及之后的所有节点,结束;
b)若pb->data > pc->data,pc++,继续2);
c)若pb->data < pc->data,pb++,继续2);
d)若pb->data == pc->data 转 3);
3) 比较 pa->data 与 pc->data;
i) 若 pa==NULL,结束;
ii) 若 pa->data < pc->data, 删除pa指向的节点,…
[/Quote]
学习了,很强啊
wcqgm
2008-10-25
打赏
举报
回复
楼上能否给些源代码或伪代码?谢谢
加载更多回复(10)
九月十月百度人搜,阿里巴巴,腾讯华为
笔试
面试八十题(第331-410题)
九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗
笔试
面试八十题 (参与
算法
&面试题交流与讨论,
请
加群:30382647) 引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾断过。正如上一篇文章支持向量机通俗导论(理解SVM的三层...
软件工程师
笔试
题目(C++)
转自:http://www.blogjava.net/huyi2006/articles/191083.html点击打开链接 发布之前先申明两点: 1 所有资料来自网络(主要是CSDN),本人只是收集和转发。 2 所有
问题
解答(尤其是代码)只是参考,不保证正确。 先发基本
问题
,再发编程
问题
.......... 4. static有什么用途?(
请
至少说明两种) 1.
C++
笔试
题目大全
1 c++ c++ c++ c++
笔试
题汇总 ①
链表
反转 单向
链表
的反转是一个经常被问到的一个面试题,也是一个非常基础的
问题
。比如一个
链表
是 这 样的: 1->2->3->4->5 通过反转后成为 5->4->3->2->1 。 最容易想到的方法遍历一遍
链表
,利用一个辅助指针,存储遍历过程中当前指针指向的下一个 元 素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍
C/C++
笔试
题
1.进程和线程的差别。 线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系
九月十月百度人搜,阿里巴巴,腾讯华为
笔试
面试八十题(第331-410题) C++版
九月十月百度人搜,阿里巴巴,腾讯华为小米搜狗
笔试
面试八十题 引言 自发表上一篇文章至今(事实上,上篇文章更新了近3个月之久),blog已经停了3个多月,而在那之前,自开博以来的21个月每月都不曾断过。正如上一篇文章支持向量机通俗导论(理解SVM的三层境界)末尾所述:”额,blog许久未有更新了,因为最近实在忙,无暇顾及blog。“与此同时,工作之余,也一直在闲心研究数据挖掘:"
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章