【LeetCode with Python】 Insertion Sort List

博客域名: 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值