题目
将单向链表按某值划分为左边小、中间相等、右边大的形式
例子:
9->0->4->5->1,pivot=3,调整后为1->0->4->9->5
进阶:在原问题的基础上再增加两个要求,左中右三部分都要稳定性,要求时间复杂度为O(N),额外空间复杂度为O(1)。
例子:
9->0->4->5->1,pivot=3,调整后为
0->1->9->5->4
思路
按照常规思路可以划分3个区域,一个smallBoundary,一个largeBoundary,而中间的就是等于的区域了。大小区间左右夹攻,如下图所示:
上面的方法并不具备稳定性,所以这里提供方法二。
因为这是链表,所以我们可以创建三个指针,分别代表大中小的链表头,再完成三个链表后再拼接即可。
下面看下具体实现。
实现
1 |
|