链表排序都写不出来能通过BAT面试吗?

链表排序是面试常见问题,时间复杂度为O(n2)的冒泡和插入排序非最佳解。归并排序通过拆分与合并实现O(nlogn)复杂度,而快速排序同样适用于链表,通过选取基准元素划分并递归排序。本文深入探讨两种排序算法在链表操作中的应用。
摘要由CSDN通过智能技术生成

链表排序是各大厂面试官经常会问到的一个面试题,这个题目很好的将排序和链表操作结合在一起,有较高的区分度,如果你在面试中被问到了这个问题,你该怎样解决呢?在往下看前先仔细想一想。

 

简单思路

相信很多同学都对数组排序比较熟悉,冒泡、堆排、快排等等简直手到擒来,但当被问到要用链表来排序时很多同学是一脸懵逼的,表示从来没想过链表还要排序,这才是真正考验你对排序理解深度的时刻,如果你真的彻底理解了排序,那么这个问题简直不要太简单,但仅仅浮于表面含糊其辞的话是通不过后续写代码环节的。

很多同学都能答上来用冒泡和插排来实现,这当然是可以的,但是时间复杂度O(n2),显然这不是面试官想要的答案。

再被进一步问能不能加快排序速度时,有的同学反应过来可以把链表中的值放到数组中,然后就可以用常见的排序方法进行排序了,比如快排;这种方法也可以,这样时间复杂度来到了O(nlogn),但是由于需要额外借助数组,因此空间复杂度是O(n),那么能不能进一步优化呢?

 

优化思路一:归并排序

实际上是可以的,让我们来思考一下归并排序这种思想,归并排序是说我们把数组分为两半,左边一半排序然后右边一半排序,最后合并两个有序数组,那么这种思路能不能应用在链表排序中呢?实际上也是可以的。

假设我们有一个链表:

首先我们将其分为两半:

这样我就得到了两段链表,然后我们分别对其进行排序,由于每段链表只有两个元素了,因此排序就很简单了,这样我们就得到了两个有序的链表:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值