1. 程式人生 > >[Leetcode] insertion sort list 鏈表插入排序

[Leetcode] insertion sort list 鏈表插入排序

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=new
ListNode(-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; 22
cur->next=head; 23 head=temp; 24 25 } 26 return newList->next; 27 } 28 };

[Leetcode] insertion sort list 鏈表插入排序