[leetcode] 86. 分隔链表

86. 分隔链表

这个题是让你把比x小的节点都挪到大于等于x节点前面去,注意还要保证每个节点的初始位置。

那么我们可以先找到第一个>=x的节点p,然后p后面的所有节点,都插入到p之前即可

我的代码写复杂了= =

class Solution {
    public ListNode partition(ListNode head, int x) {
        ListNode p = head;
        boolean flag = false;
        if (p != null && p.val >= x) flag = true;
        while (p != null && p.next != null) {
            if (flag && p.next.val < x) {
                ListNode tmp = p.next;
                p.next = p.next.next;
                head = listNodeInsert(head, tmp, x);
                continue;
            } else if (p.next.val >= x) {
                flag = true;
            }
            p = p.next;
        }
        return head;
    }

    public ListNode listNodeInsert(ListNode head, ListNode node, int x) {
        ListNode p = head;

        if (p.val >= x) {
            node.next = p;
            return node;
        }

        while (true) {
            if (p.next == null) {
                p.next = node;
                node.next = null;
                break;
            } else if (p.next.val >= x) {
                node.next = p.next;
                p.next = node;
                break;
            } else {
                p = p.next;
            }
        }
        return head;
    }
}

猜你喜欢

转载自www.cnblogs.com/acbingo/p/9404586.html