[Leetcode] insertion sort list 鏈表插入排序
阿新 • • 發佈:2017-07-17
code 比較大小 list 使用 div sort 復雜 開頭 sin
Sort a linked list using insertion sort.
題意:使用插入排序排鏈表。
思路:所謂的插入排序法,可以理解為,從原鏈表中取結點,每次都從新的鏈表的開頭開始遍歷比較,在新鏈表中找到不小於當前節點的位置,然後將當前節點插入進去,依次重復這種過程,時間復雜度為O(n^2)。比較大小時可以采用以結點後綴的形式去比較,這樣可以在已排好序的新鏈表中找到最後一個小於當前值的位置,可以省略一多定義一個指針,這種寫法還是很值得思考的。還有就是連接新鏈表時,先連好後面的,然後再連接前面的。還有值得註意的是,每次比較都是從新鏈表的開始比較,所以要先定位好最開始的起始點。代碼如下:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode *insertionSortList(ListNode *head) 12 { 13 ListNode *newList=newListNode(-1); 14 while(head) 15 { 16 ListNode *temp=head->next; 17 ListNode *cur=newList; 18 while(cur->next&&cur->next->val<head->val) 19 cur=cur->next; 20 21 head->next=cur->next; 22cur->next=head; 23 head=temp; 24 25 } 26 return newList->next; 27 } 28 };
[Leetcode] insertion sort list 鏈表插入排序