链接: 分隔链表
给你一个链表的头节点 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]
提示:
[0, 200]
内-100 <= Node.val <= 100
-200 <= x <= 200
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public static ListNode partition(ListNode head, int x) {
if (head == null) {
return null;
}
ListNode node = head;
ListNode beforeNode = null;
ListNode firstBiggerNode = null;
ListNode firstSmallerNode = null;
ListNode smallerNode = null;
while (node != null) {
if (node.val < x) {
if (firstSmallerNode == null) {
firstSmallerNode = node;
}
if (smallerNode != null) {
smallerNode.next = node;
}
if (beforeNode != null) {
beforeNode.next = node.next;
}
smallerNode = node;
} else {
if (firstBiggerNode == null) {
firstBiggerNode = node;
}
beforeNode = node;
}
node = node.next;
}
if (smallerNode != null) {
smallerNode.next = firstBiggerNode;
return firstSmallerNode;
} else {
return firstBiggerNode;
}
}
}
整理完毕,完结撒花~