分隔链表
题目
给你一个链表的头节点 head
和一个特定值 x
, 请你对 链表进行分隔, 使得所有小于 x
的节点都出现在大于或等于 x
的节点之前.
你应当保留两个分区中每个节点的初始相对位置.
提示:
- 链表中节点的数目在范围
[0, 200]
内 -100 <= Node.val <= 100
-200 <= x <= 200
示例
输入: head = [1, 4, 3, 2, 5, 2]
, x = 3
输出: [1, 2, 2, 4, 3, 5]
题解
麻了, 一开始还妄图使用双指针. 其实思路很简单, 新建两个链表, 一个用于存储原链表小于 x
的序列, 另一个存储大于等于 x
的序列, 最后把两个链表拼起来即可.
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} head
* @param {number} x
* @return {ListNode}
*/
var partition = function (head, x) {
let small = new ListNode(0)
const smallHead = small
let large = new ListNode(0)
const largeHead = large
while (head) {
if (head.val < x) {
small.next = head
small = small.next
} else {
large.next = head
large = large.next
}
head = head.next
}
large.next = null
small.next = largeHead.next
return smallHead.next
}