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
.
解法非常简单,新建另外两个链表,一个存储比x大的,一个存储比x小的,一次遍历。最后将两个链表连在一起。见代码:
public ListNode partition(ListNode head, int x) {
ListNode root = new ListNode(0);
ListNode rootGreateNode = new ListNode(0);
ListNode lessNode = root;
ListNode greaterNode = rootGreateNode;
while (head != null) {
if (head.val < x) {
lessNode.next = head;
lessNode = lessNode.next;
} else {
greaterNode.next = head;
greaterNode = greaterNode.next;
}
head = head.next;
}
greaterNode.next = null;
lessNode.next = rootGreateNode.next;
return root.next;
}