/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode partition(ListNode head, int x) {
if(head == null) return head;
ListNode dummy = new ListNode(0);
ListNode left = dummy;
dummy.next = head;
ListNode curr = head;
ListNode prev = dummy;
while(curr != null){
//prev == left为特殊情况,导致curr指向自身
if(prev == left){
if(curr.val < x) left = left.next;
prev = curr;
curr = curr.next;
}
else{
//如果大于target,不用进行位移
if(curr.val >= x){
prev = curr;
curr = curr.next;
}
else{
//改变指针指向,发生位移
prev.next = curr.next;
curr.next = left.next;
left.next = curr;
left = left.next;
curr = prev.next;
}
}
}
return dummy.next;
}
}
归纳:三个指针:prev,curr和left,left指针始终是在最后一个小于target的位置