社区
数据结构与算法
帖子详情
笔试被人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的长度)
...全文
943
30
打赏
收藏
笔试被人BS了,请算法高手还解决链表的交集问题.
各位兄弟,请为小弟弟看看,被人BS了,心里很难受.也想学习一下: 现有三个单链表A,B和C,其数据都是按从小到大的顺序(数据可能有相同的)来存储的,现要求对它们进行操作,现实A的链表内容为A,B和C的交集(公共部分,没有重复的记录)。同时对A中的其他结点进行释放内容(要求算法的复杂度为O(m+n+p)其中m,n,p分别为A,B,C的长度)
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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个月之久),...
软件工程师
笔试
题目(C++)
发布之前先申明两点: 1 所有资料来自网络(主要是CSDN),本人只是收集和转发。 2 所有
问题
解答(尤其是代码)只是参考,不保证正确。 先发基本
问题
,再发编程
问题
.......... ...(
请
至少说明两种) 1.
C++
笔试
题目大全
单向
链表
的反转是一个经常被问到的一个面试题,也是一个非常基础的
问题
。比如一个
链表
是 这 样的: 1->2->3->4->5 通过反转后成为 5->4->3->2->1 。 最容易想到的方法遍历一遍
链表
,利用一个辅助指针,存储遍历...
java面试
笔试
题整理
笔试
题常见考点: 1. 面向对象 OOADP 2. 多线程 3. 集合框架 4. 异常 5. String 6.
算法
和数据结构 7. 原理/机制:JVM垃圾回收 类加载机制 为什么设计异常机制 JAVA里的泛型 1.5新增语法 5、String是最基本...
C语言
笔试
题--从CSDN转发
C语言
笔试
题--从CSDN转发关键字: 工作,C语言 4.static有什么用途?(
请
至少说明两种) 1.限制变量的作用域 2.设置变量的存储域 7.引用与指针有什么区别? 1) 引用必须被初始化,指针不必。 2) 引用初始化以后不能...
数据结构与算法
33,027
社区成员
35,335
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章