2014.7.26 update:
public ListNodepartition(ListNode head, int x) {
ListNode fakeLeftHead = new ListNode(0);
ListNode fakeRightHead = new ListNode(0);
ListNode leftTail = fakeLeftHead;
ListNode rightTail = fakeRightHead;
fakeLeftHead.next = head;
ListNode cur = head;
while (cur != null) {
if(cur.val < x) {
leftTail.next = cur;
cur = cur.next;//
如果else结束之后 cur = cur.next 这样cur =null了
leftTail =leftTail.next;
leftTail.next =null;
// 如果不设null,出现死循环
} else if(cur.val >= x) {
rightTail.next = cur;
cur = cur.next;
rightTail =rightTail.next;
rightTail.next = null;
}
}
leftTail.next = fakeRightHead.next;
return fakeLeftHead.next;
}
public class Solution {
public ListNodepartition(ListNode head, int x) {
// Start typing your Java solution below
// DO NOT write main() function
if (head == null || head.next == null) {
returnhead;
}
ListNode left, right;
ListNode fake = newListNode(Integer.MIN_VALUE);
fake.next = head;
head = fake;;
ListNode tmp = fake;
while (tmp.next != null && tmp.val <x) {
tmp =tmp.next;
}
if (tmp.next == null ){
returnhead.next;
}
ListNode partition = tmp;
left = fake;
right = partition;
// process left
while (left.next != partition) {
if(!(left.next.val < partition.val)) {
// move the node to theright
ListNode tmpNode =left.next;
left.next =tmpNode.next;
tmpNode.next =right.next;
right.next = tmpNode;
right = right.next;
} else{
left = left.next;
}
}
// process right
while (right.next != null) {
if(right.next.val
ListNode tmpNode =right.next;
right.next =tmpNode.next;
tmpNode.next =left.next;
left.next = tmpNode;
left = left.next;
} else{
right = right.next;
}
}
return head.next;
}
}