【LeetCode with Python】 Insertion Sort List

来源:互联网 发布:three.min.js下载 编辑:程序博客网 时间:2024/06/05 08:54
博客域名:http://www.xnerv.wang
原题页面:https://oj.leetcode.com/problems/insertion-sort-list/
题目类型:
难度评价:★
本文地址:http://blog.csdn.net/nerv3x3/article/details/3465729

Sort a linked list using insertion sort.


链表的插入排序。先是看到网上有人用C++写的解法,生成一个新的链表,每次都将下一个结点插入到这个新链表中,于是用Python仿写之,然超时。后来改成不再生成新链表,而是直接在原链表上原地排序,并且加入了一个判断条件,避免当需要排序的链表已经有序时再做过多无用功(因为前一次超时的原因就是判题系统给了一个超长的已有序链表-_-)。


class Solution:    # @param head, a ListNode    # @return a ListNode    def insertionSortList(self, head):        if None == head or None == head.next:            return head        new_head = ListNode(0)        new_head.next = head        last = new_head.next        cur = new_head.next.next        while None != cur:            if new_head != last and cur.val >= last.val:                last = cur                cur = cur.next                continue            ins = new_head            while None != ins.next and ins.next.val <= cur.val: # stable sort                ins = ins.next            next_cur = cur.next            last.next = cur.next            cur.next = ins.next            ins.next = cur            cur = next_cur        return new_head.next