题目:
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3
输出: 1->2->2->4->3->5
分析:
可以想到将原始链表分成特定值x之前的一个新链表和特定值x之后的一个新链表。设两个新的头节点dummy1和dummy2分别引领两个新的链表,这样当原始链表遍历完成后,最后将两个新链表链接在一起就好了。
代码:
/**
* 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) {
ListNode dummy1 = new ListNode(0);
ListNode dummy2 = new ListNode(0);
ListNode dummy1_temp = dummy1;
ListNode dummy2_temp = dummy2;
while (head != null) {
if (head.val < x) {
dummy1_temp.next = head;
dummy1_temp = dummy1_temp.next;
} else {
dummy2_temp.next = head;
dummy2_temp = dummy2_temp.next;
}
head = head.next;
}
dummy2_temp.next = null;
dummy1_temp.next = dummy2.next;
return dummy1.next;
}
}