LeetCode----Insertion Sort List

Insertion Sort List

Sort a linked list using insertion sort.

原題鏈接爲: https://leetcode.com/problems/insertion-sort-list

分析:

使用插入排序對鏈表進行排序。

可以新建一個帶頭節點的有序鏈表,每次從原鏈表中選擇一個節點,插入到帶頭節點的鏈表中。

 

C++代碼:

 

class Solution {
public:
    ListNode* insertionSortList(ListNode* head) {
        ListNode dummy = ListNode(-1);
        ListNode * cur = head, *p, *pnext, *t;
        while(cur){
            p = &dummy;
            while(p->next && cur->val > p->next->val){
                p = p->next;
            }
            pnext = p->next;
            p->next = cur;
            t = cur->next;
            cur->next = pnext;
            cur = t;
        }
        return dummy.next;
    }
};

 

 

 

 

 

Python的代碼不知道爲什麼一直TLE。

先貼上,等回頭再過來改。

20190227: 試了下代碼AC了,並簡單修改了下代碼:

class Solution(object):
    def insertionSortList(self, head):
        """
        :type head: ListNode
        :rtype: ListNode
        """
        if not head or not head.next:
            return head

        cur = head
        # dummy是新的鏈表表頭
        dummy = ListNode(-1)
        while cur:
            p = dummy
            while p.next and cur.val > p.next.val:
                p = p.next
            t = cur.next
            cur.next = p.next
            p.next = cur
            cur = t
        return dummy.next

時間優化:上述代碼運行速度較慢,打敗了30多的submission,想到了一個優化方案,用指針記錄新鏈表的head、end和上一次插入的節點lastinsert三個節點,對於新的節點,先和這三個節點作比較,再插入節點。此時平均可以減少一半的比較次數。

發佈了143 篇原創文章 · 獲贊 59 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章