1. 程式人生 > 實用技巧 >Leetcode86.分隔連結串列

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, sidx = 0, bidx = 0;
        for(ListNode p=head; p!=null; p=p.next) len ++;
        ListNode[] small = new ListNode[len];
        ListNode[] big = new ListNode[len];
        for(ListNode p=head; p!=null; p=p.next){
            if(p.val < x){
                if(sidx > 0) small[sidx-1].next = p;
                small[sidx++] = p;
            }else{
                if(bidx > 0) big[bidx-1].next = p;
                big[bidx++] = p;
            }
        }
        if(bidx>0 && sidx>0){
            small[sidx-1].next = big[0];
            big[bidx-1].next = null;
            return small[0];
        }
        if(sidx==0){
            return big[0];
        }
        return small[0];
    }
}

執行用時:0 ms, 在所有 Java 提交中擊敗了100.00%的使用者
記憶體消耗:37.7 MB, 在所有 Java 提交中擊敗了81.10%的使用者