如何快速合并两个链表

如何快速合并两个链表这个问题是在面试的时候遇到的,面试官是微软资深CTO周雷先生,面试的时候周先生一共出了三个题目:

1.两个无序的链表将其合并成一个,要考虑用时最少,内存最少(数据结构中的时间复杂度,空间复杂度):

拿到这问题,一开始想的是先把两个链表进行排序,然后分别插入到一个新的链表,虽然可以完成这样的效果,显然不是最优的方案,然后又想既然考虑的内存最优,那可以在原来的基础上进行修改,我的思路是这样的:首先对两个集合进行排序,然后固定一个集合进行遍历,将另外一个集合中的元素插入进去,这个方法看起来也可以到达预期效果,这个时候周先生摇摇头,说还是不行,你的思维固定在排序上,排序白白浪费时间,为何不换个思维,要考虑的时间,内存方面,其实可以这么做,新建一个空的链表,将另外两个插入到这个表中(当时就想这不是跟第一种想法一样),还没说完,精华就是每次比较两个链表的第一个元素拿到较小的(假如从小到大排序)按顺序插入到新的链表中,并且把插入过得元素删掉,从而保证每次只比较第一个元素,外层使用一个while循环控制,这样的效率比之前的高多了

2.考一个思维逻辑题:一堆萝卜有100根,有一个兔子最多一次可以背50根,这个兔子背着萝卜回家,她的家在距离萝卜堆50米的地方,不过这个兔子太爱吃萝卜了,每走一步都要吃一根,问兔子最多可以背多少根萝卜到家?(最要走都要吃)

3.这个问题记得不太清楚,毕竟是2年前的面试题了,兔子最多剩多少根,期待你们的神评论

最后总结发现只要是技术大牛面试都会问一些很基础,很底层的东西,恰好我们又容易忽略,他们更看重我们思维逻辑和钻研精神

猜你喜欢

转载自blog.csdn.net/xiaoxiaohu_/article/details/70257407
今日推荐