上周面试的时候被问了一道对单链表使用归并排序,我的解法是这样的:
以下是我的代码
https://gist.github.com/fxxz/058689f7ecfb4633755b
结果面试官不满意我的解法,他说没必要遍历链表的一半来取得链表中点,这样效率不是最高的。如果我没记错的话,他的做法大概描述如下:
排序第一个 Node ,发现已排序,就归并前两个 Node 。已排好前两个 Node ,接着递归排第 3 和第 4 个 Node 。然后递归排第 1 , 2 , 3 , 4 个 Node 。这时候应该递归地把第 1 , 2 , 3 , 4 个 Node 和第 5 , 6 , 7 , 8 个 Node 归并,但是 5 , 6 , 7 , 8 还没排好,应该一层层递归下去把 5 , 6 , 7 , 8 个 Node 排列好。以此类推,直到链表末尾。
听完面试官的做法,楼主有一种豁然开朗的赶脚,但是水平有限,实在写不出这样的归并排序。求问各位 V 友代码应该肿么写? THX
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.