将链表按照一定规则排序,比给定值小的在给定值左边,大于等于的在其右边,要求是稳定的。
(leetcode86)
Input: head = 1->4->3->2->5->2, x = 3 Output: 1->2->2->4->3->5
思路: 先找到首个大于给定值的(insertNode),只有依次找到小于给定值的插入到insertNode之前,直到全部遍历完。
public class L86PartitionList {
public static ListNode partition(ListNode head, int x) {
if(head == null){
return null;
}
ListNode preHead = new ListNode(0);
preHead.next = head;
ListNode pre = preHead;
ListNode cur = head;
ListNode insertNode = null;
while(cur != null){
if(cur.val >=x && insertNode == null){
insertNode = pre;
}
if(cur.val < x && insertNode !=null){
pre.next = cur.next;
cur.next = insertNode.next;
insertNode.next = cur;
insertNode = cur;
cur = pre.next;
}else{
pre = cur;
cur = cur.next;
}
}
return preHead.next;
}
}