[路飞]_面试题 02.04. 分割链表

95 阅读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小统一放到左边,否则就放在右边。最后把左右两边的链表链接即可

代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} x
 * @return {ListNode}
 */
var partition = function(head, x) {
    if (!head) return null
    let leftHead = new ListNode(0)
    let rightHead = new ListNode(0)
    let left = leftHead
    let right = rightHead
    let cur = head
    while(cur) {
        if (cur.val < x) {
            left = left.next = cur
        } else {
             right = right.next = cur
        }
        cur = cur.next
    }
    left.next = rightHead.next
    right.next = null 
    return leftHead.next
};