给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1->4->3->2->5->2, x = 3 输出: 1->2->2->4->3->5
解题思路:
创建两个链表a,b,将原来链表中的每个结点,小于等于x的结点放在a链表的末尾,如果是大于就放在b的,末尾,最后将b的头结点接到a末尾。
public ListNode partition(ListNode head, int x) {
ListNode dummy1 = new ListNode(0), dummy2 = new ListNode(0); //dummy heads of the 1st and 2nd queues
ListNode curr1 = dummy1, curr2 = dummy2; //current tails of the two queues;
ListNode l=head;
while (l!=null){
if (l.val<x) {
curr1.next = l;
curr1 = l;
}else {
curr2.next = l;
curr2 = l;
}
l = l.next;
}
curr2.next = null; //important! avoid cycle in linked list. otherwise u will get TLE.
curr1.next = dummy2.next;
return dummy1.next;
}