86. 分隔链表
给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
当单链表拆分时巨麻烦时,可以多开空间,简化问题
/**
* 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 k = head;
//比x小的
ListNode ahead = new ListNode();
//比x大的
ListNode bhead = new ListNode();
ListNode before = new ListNode();
ListNode p = ahead;
ListNode q = bhead;
int flag = 0;
if(head == null)
return head;
while(k != null){
if(k.val >= x){
q.next = new ListNode();
q = q.next;
q.val = k.val;
// System.out.println("0: q.val : "+q.val);
k = k.next;
}else{
p.next = new ListNode();
p = p.next;
p.val = k.val;
// System.out.println("1: p.val : "+p.val);
k = k.next;
}
}
ahead = ahead.next;
if(ahead == null)
return bhead.next;
p.next = bhead.next;
return ahead;
}
}