Given 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.
For example,
Given 1->4->3->2->5->2
and x = 3,
return 1->2->2->4->3->5
.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/**
* Create a new list (list1), insert node into the new list if
* its val < x, then concat list to the tail of list1.
* /
public ListNode partition(ListNode head, int x) {
if (head == null) return head;
ListNode head1;
ListNode tail1;
ListNode head2;
ListNode node;
ListNode pre;
// Create new head for list1
head1 = new ListNode(0);
tail1 = head1;
// Create new head for list2
head2 = new ListNode(0);
pre = head2;
pre.next = head;
node = head;
while (node != null) {
if (node.val < x) {
// insert node to the list 1
tail1.next = node;
tail1 = node;
pre.next = node.next;
node = node.next;
} else {
pre = node;
node = node.next;
}
}
tail1.next = head2.next;
return head1.next;
}
}