将链表按照一定规则排序,比给定值小的在给定值左边,大于等于的在其右边,要求是稳定的。
(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; } }