Leetcode86.分隔連結串列
阿新 • • 發佈:2020-12-28
題目連線: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%的使用者