Sort a linked list in O(n log n) time using constant space complexity.
大家看完題目估計跟我一樣啦。。。都在想哪些是nlogn啊~快速排序、歸併排序、堆排序。然後開始愁,這些東西變成list了可怎麼辦啊。。。
可是我深深地記得在CMU的時候老師告訴我,java現在內建的Arrays.sort用的是快排,然後我就想,那麼……為什麼不把list轉成array然後排完了放回去呢。
於是我就用一個arraylist先裝這個list,然後再把arraylist轉成array去sort,然後把結果再存進一個linkedlist返回頭結點~寫到這裡自己都想樂了,又笨又好玩的方法~
不說了,直接上代碼~已通過leetcode測試~附帶測試main函數
import java.util.ArrayList;import java.util.Arrays;public class sortList {public static void main(String args[]){sortList dp = new sortList();ListNode head = new ListNode(3);ListNode p1 = new ListNode(2);head.next=p1;ListNode p2 = new ListNode(1);p1.next = p2;ListNode p3 = new ListNode(5);p2.next = p3;ListNode p4 = new ListNode(4);p3.next = p4;prinf(head);prinf(dp.sortList(head));}private static void prinf(ListNode input){while(input!=null){System.out.print(input.val+"->");input = input.next;}System.out.println();}
<span style="white-space:pre"></span>//下面犯賤開始public ListNode sortList(ListNode head) {//建議大家換個方法名或者class名,我這裡重複了if(head==null) return head; ArrayList<Integer> arr = new ArrayList<Integer>(); int j=0; ListNode p= head; while(p!=null){ arr.add(p.val); p=p.next; } Object[] array = arr.toArray(); Arrays.sort(array);//其實只有這一步。。。 ListNode start= new ListNode(0); ListNode q = start; for(int i=0;i<array.length;i++){ q.val=(Integer) array[i]; if(i==array.length-1){q.next = null;break;} ListNode k = new ListNode(0); q.next=k; q=k; } return start; }}