免费注册 查看新帖 |

Chinaunix

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

[算法] 面试编程题:单链表和之恋 [复制链接]

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-25 09:18 |只看该作者 |倒序浏览
两个单链表(singly linked list),每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list长度相等。 要求是:1. 不用递归。2. 要求算法在最好的情况下,只遍历两个list一次 ,最差的情况下两遍。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
2 [报告]
发表于 2013-07-25 09:42 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [报告]
发表于 2013-07-25 09:43 |只看该作者
这两个输入的list长度相等……2. 要求算法在最好的情况下,只遍历两个list一次 ,最差的情况下两遍。
-------------- 不懂,长度相等,不就是依次遍历一次就行了嘛

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
4 [报告]
发表于 2013-07-25 10:17 |只看该作者
很简单的从低位到高位啊,要是高位到地位的话,我觉得很复杂的。回复 2# pmerofc


   

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
5 [报告]
发表于 2013-07-25 10:39 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
水瓶座
日期:2013-09-04 15:09:57白羊座
日期:2014-04-17 16:48:13
6 [报告]
发表于 2013-07-25 11:22 |只看该作者
是不是我没看懂题目?

好像直接遍历一次就算出来了啊

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
7 [报告]
发表于 2013-07-25 11:23 |只看该作者
贴出来瞅瞅回复 6# l2y3n2


   

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
8 [报告]
发表于 2013-07-26 09:13 |只看该作者
单链表和之恋分析:

原题:两个单链表(singly linked list),每一个节点里面一个0-9的数字,输入就相当于两个大数了。然后返回这两个数的和(一个新list)。这两个输入的list长度相等。 要求是:1. 不用递归。2. 要求算法在最好的情况下,只遍历两个list一次 ,最差的情况下两遍。

分析:遇到一个面试题,首先,要澄清和理解题意,确保你的理解和面试官的本意一致。题中的单链表,可不可以原地修改?是从高位到低位,还是低位到高位?如果是从低位到高位,那么问题很简单,是不是?只要两个指针移动(因为是等长的),对应位置相加,同时记录是否有进位,产生的结果存入新的链表中。

如果是从高到低,问题就复杂了,进位是万恶之源。这时,也许我们会想到reverse两个单链表(其实,这也是一道很好的面试题,如何做?考虑递归和递推两种算法),但这样做,是不是最好最坏情形都得遍历两次?好像不合题意。

如果新的链表的节点可以存一个或两个数字,那么,第一遍,将相应节点的数字相加,存入新的链表,并用一个flag标志整个操作中是否有进位。如果没有,结了;否则,再扫描一遍新的链表,将有两个数字的进位存到上一个节点。如果新的链表是双的,问题比较简单;如果新的链表还是单的,这一步也会很复杂,比如,10-〉9-〉9-〉12,如何转成1-〉1-〉0-〉0-〉2,本身也是一个很好的面试题。这时可能需要reverse链表再操作。

如果新的链表的节点只能存一个数字,那么能有什么办法?

也许你有更好的解决办法?期待。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
9 [报告]
发表于 2013-07-26 12:15 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2013-07-26 18:12 |只看该作者
这里的加法是限定了没有负数的存在么?
如果是这样,那就好处理了。
其实在将一个数化成单链表的时候,就可以把数字倒着存放,然后从链表头依次做加法运算,通过一个标志flag来说明是否有进位
类似于 ADDC A,B
如果没有进位,令flag=0,否则flag=1
至于发生进位了,那么将这个节点的数转化一下(通过除以10 的余数0-9,存放),此时flag=1,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP