Leetcode86.分隔链表

题目连接:86.分隔链表

思路:遍历一遍链表,将表中结点分为两类,一类是小于给定的x,另一类是大于等于x。输出结果时要考虑四种情况:输入的表头为空;没有小于x的节点;没有大于等于x的节点;既有小于x又有大于等于x的。

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode partition(ListNode head, int x) {
        if(head == null) return head;
        int len = 0, li = 0, mti = 0;
        for(ListNode p=head; p!=null; p=p.next) len ++;
        ListNode[] less = new ListNode[len];
        ListNode[] moreThen = new ListNode[len];
        for(ListNode p=head; p!=null; p=p.next){
            if(p.val < x){
                if(li > 0) less[li-1].next = p;
                less[li++] = p;
            }else{
                if(mti > 0) moreThen[mti-1].next = p;
                moreThen[mti++] = p;
            }
        }
        if(mti>0 && li>0){
            less[li-1].next = moreThen[0];
            moreThen[mti-1].next = null;
            return less[0];
        }
        if(li==0){
            return moreThen[0];
        }
        return less[0];
    }
}

执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:37.3 MB, 在所有 Java 提交中击败了98.07%的用户

原文地址:https://www.cnblogs.com/liuyongyu/p/14203731.html