Problem
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
Given 1->4->3->2->5->2->null and x = 3,
return 1->2->2->4->3->5->null.
思路
- 其实最重要的, 首先拿到这一题, 第一眼最直接快捷的方法是什么?
- 把小于target的移到左边, 大于等于target的放到右边.
- 而头指针可能会变, 所有要有两个dummy node.
- 组成两个链表后, 连接左链表末尾和右链表头
public ListNode partition(ListNode head, int x) {
ListNode leftDummy = new ListNode(0);
ListNode rightDummy = new ListNode(0);
ListNode left = leftDummy;
ListNode right = rightDummy;
while (head != null) {
if (head.val < x) {
left.next = head;
left = left.next;
} else {
right.next = head;
right = right.next;
}
head = head.next;
}
right.next = null;
left.next = rightDummy.next;
return leftDummy.next;
}