86. Partition List
Given the head
of a linked list and a value x
, partition it such that all nodes less than x
come before nodes greater than or equal to x
.
You should preserve the original relative order of the nodes in each of the two partitions.
Example 1:

Input: head = [1,4,3,2,5,2], x = 3 Output: [1,2,2,4,3,5]
Example 2:
Input: head = [2,1], x = 2 Output: [1,2]
Constraints:
- The number of nodes in the tree is in the range
[0, 200]
. -100 <= Node.val <= 100
-200 <= x <= 200
Rust Solution
struct Solution;
use rustgym_util::*;
impl Solution {
fn partition(mut head: ListLink, x: i32) -> ListLink {
let mut left: Vec<i32> = vec![];
let mut right: Vec<i32> = vec![];
while let Some(node) = head {
let val = node.val;
if val < x {
left.push(val);
} else {
right.push(val);
}
head = node.next;
}
let mut res = None;
while let Some(val) = right.pop() {
res = ListLink::link(val, res);
}
while let Some(val) = left.pop() {
res = ListLink::link(val, res);
}
res
}
}
#[test]
fn test() {
let head = list!(1, 4, 3, 2, 5, 2);
let x = 3;
let res = list!(1, 2, 2, 4, 3, 5);
assert_eq!(Solution::partition(head, x), res);
}
Having problems with this solution? Click here to submit an issue on github.