[路飞]_分隔链表

200 阅读1分钟

题目介绍

给你一个链表的头节点 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
};