Insertion Sort List -- LeetCode
阿新 • • 發佈:2018-11-16
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
原題連結: http://oj.leetcode.com/problems/insertion-sort-list/這道題跟 Sort List 類似,要求在連結串列上實現一種排序演算法,這道題是指定實現插入排序。插入排序是一種O(n^2)複雜度的演算法,基本想法相信大家都比較瞭解,就是每次迴圈找到一個元素在當前排好的結果中相對應的位置,然後插進去,經過n次迭代之後就得到排好序的結果了。瞭解了思路之後就是連結串列的基本操作了,搜尋並進行相應的插入。時間複雜度是排序演算法的O(n^2),空間複雜度是O(1)。程式碼如下:
public ListNode insertionSortList(ListNode head) { if(head == null) return null; ListNode helper = new ListNode(0); ListNode pre = helper; ListNode cur = head; while(cur!=null ) { ListNode next = cur.next; pre = helper; while(pre.next!=null && pre.next.val<=cur.val) { pre = pre.next; } cur.next = pre.next; pre.next = cur; cur = next; } return helper.next;}
這道題其實主要考察連結串列的基本操作,用到的小技巧也就是在
Swap Nodes in Pairs
中提到的用一個輔助指標來做表頭避免處理改變head的時候的邊界情況。作為基礎大家還是得練習一下哈。