给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
思路:
分别插入即可,一条链表,拿2个点,一个引用,一个遍历过程中的节点不断移动
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
if (head == null) return null;
ListNode b = null;
ListNode bn = null;
ListNode cur = head;
ListNode a = new ListNode(-1);
ListNode an = null;
while (cur != null) {
if (cur.val < x && a !=null) {
if (an != null) {
an.next = cur;
an = an.next;
cur = cur.next;
} else {
a.next = cur;
cur = cur.next;
an = a.next;
}
} else if (b != null) {
bn.next = cur;
bn = bn.next;
cur = cur.next;
} else {
b = cur;
cur = cur.next;
bn = b;
}
}
if (bn != null && bn.next != null)
bn.next = null;
if (an != null && an.next != null) {
an.next = null;
}
if (an != null)
an.next = b;
return a.next == null?b:a.next;
}
}