题目介绍
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3 输出:[1,2,2,4,3,5] 示例 2:
输入:head = [2,1], x = 2 输出:[1,2]
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
其实有点想快速排序,以x为基准点,比x小的移动到左边,否则就不动,放到右边,所以需要连个虚拟链表辅助
var partition = function(head, x) {
if (!head) return null
let smallHead = new ListNode(0)
let largeHead = new ListNode(0)
let small = smallHead
let large = largeHead
while(head) {
if (head.val < x) {
small = small.next = head
} else {
large = large.next = head
}
head = head.next
}
small.next = largeHead.next
large.next = null
return smallHead.next
};