链表--- 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前,并保留两部分内链表节点原有的相对顺序

思路:一拆为二然后合并

public ListNode partition(ListNode head, int x) {
        ListNode dummy1 = new ListNode(-1);
        ListNode dummy2 = new ListNode(-1);
        ListNode p1 = dummy1;
        ListNode p2 = dummy2;
        ListNode p = head;
        while (p != null) {
            if (p.val < x) {
                p1.next = p;
                p1 = p1.next;
            } else {
                p2.next = p;
                p2 = p2.next;
            }
            p = p.next;
        }
        if (dummy1.next == null) {
            return head;
        } else {
            p1.next = dummy2.next;
            p2.next = null;//需要断开
            return dummy1.next;
        }
    }

猜你喜欢

转载自blog.csdn.net/l1394049664/article/details/81350114