summary:
divide and conquer | two pointers
package myapp.kit.leetcode.top200;
import myapp.kit.leetcode.base.ListNode;
/**
*
* 86
* medium
* https://leetcode.com/problems/partition-list/
*
*
* 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.
*
* Example:
*
* Input: head = 1->4->3->2->5->2, x = 3
* Output: 1->2->2->4->3->5
*
* @author huangdingsheng
* @version 1.0, 2020/7/14
*/
public class partition_list_86 {
public ListNode partition(ListNode head, int x) {
ListNode subNode1 = new ListNode(0);
ListNode currNode1 = subNode1;
ListNode subNode2 = new ListNode(0);
ListNode currNode2 = subNode2;
ListNode temp = null;
// divide list
while (head != null) {
if (head.val < x) {
currNode1.next = head;
currNode1 = currNode1.next;
} else {
currNode2.next = head;
currNode2 = currNode2.next;
}
temp = head.next;
head.next = null;
head = temp;
}
// merge
if (subNode1.next == null) {
return subNode2.next;
}
currNode1.next = subNode2.next;
return subNode1.next;
}
}