免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2620 | 回复: 1
打印 上一主题 下一主题

[算法] 一道面试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-09-10 22:14 |只看该作者 |倒序浏览
今天参加某公司的网上笔试。一共有四道题目,其他三道倒还觉得不难,很快就作出来了。而有一道,开始也觉得不难,不过做着做着,却发现没自己想象那么简单。

题目大意是:
  实现一个可以增加一个节点、删除某个区间的节点、修改某个节点、undo和redo的链表。

  增加、删除和修改节点,相信学过数据结构的都觉得不难,至少可以用自己的方式哪怕是最简单的方式去实现。难就难在undo和redo上。刚看到题目,我也想到了undo是需要用栈来存储操作的,而redo貌似是用队列来存储操作。

  做了该题,发现自己诸多不足。在此发帖,诚邀各路高手参与讨论,小弟愚昧,自己的实现暂不贴出。

论坛徽章:
0
2 [报告]
发表于 2011-09-11 00:00 |只看该作者
回复 1# quxiaoyong
我理解的,redo是指做了操作a,undo(撤销操作a),之后做redo(重做操作a)这个意思吧。

我觉得你已经回答对了,用个类似的栈结构就可以了,这个栈只保存最近的K的操作,在undo的时候,不要立刻弹栈,而是使用另一个指针从栈顶向栈底做undo,如果需要做redo,仍然使用这个指针向栈顶做redo。直到下一个“真实”操作。当下一个“真实”操作出现时,弹出从栈顶到当前指针的所有元素,再这个新操作压栈。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP