分隔链表
- 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。
你应当 保留 两个分区中每个节点的初始相对位置。
示例 1:
输入:head = [1,4,3,2,5,2], x = 3
输出:[1,2,2,4,3,5]
解题思路
- 将链表分隔成两部分,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前,同时保留原有节点的相对位置。
- 使用两个指针分别构建两个链表:
-
1、小于 x 的节点构成一个链表。
-
2、大于或等于 x 的节点构成另一个链表。
-
3、最后将这两个链表连接起来。
Java实现
public class PartitionLinked {
public static class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x; }
}
public ListNode partition(ListNode head, int x) {
// 创建两个哨兵节点
ListNode before = new ListNode(