zoukankan      html  css  js  c++  java
  • Sort List 分类: leetcode 算法 2015-07-10 15:35 1人阅读 评论(0) 收藏

    对链表进行排序,要求时间复杂度为O(n log n) ,不使用额外的空间。

    我一开始的想法是借助quicksort的思想,代码如下:

    # time O(nlog(n))
    # Definition for singly-linked list.
    class ListNode:
        def __init__(self, x):
            self.val = x
            self.next = None
    
    class Solution:
        def sortList(self, head):
            if head is not None:
                self.quicksort(head,None)
            return head
    
        def quicksort(self,node_head,node_end):
            if node_head is not node_end :
                q=self.patition(node_head,node_end)
                self.quicksort(node_head,q)
                self.quicksort(q.next,node_end)
        def patition(self,head,end):
            #@return{ListNode}
            if head is None:
                return None
            else:
                i=head
                j=head.next
                x=head.val
                while j is not end:
                    if j.val<x:
                        self.ListNode_Val_Swap(i,j)
                        i=i.next
                    j=j.next
                i.val=x
                return i
    
        # swap 2 ListNodes' val
        def ListNode_Val_Swap(self,node1,node2):
            node1.val,node2.val=node2.val,node1.val

    但是对于大量的数据时间超出,不知为何,求指教。
    本地测试的时候,一旦链表长度超过8000多就会报错:RuntimeError: maximum recursion depth exceeded
    这是怎么回事?

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    HZNU 2019 Summer training 6
    HZNU 2019 Summer training 5
    HZNU 2019 Summer training 4
    Garlands CodeForces
    HZNU 2019 Summer training 3
    UVA
    HZNU 2019 Summer training 2
    Serge and Dining Room(线段树)
    HZNU 2019 Summer training 1
    【7-10 PAT】树的遍历
  • 原文地址:https://www.cnblogs.com/iois/p/4637149.html
Copyright © 2011-2022 走看看