wuti

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    # @param {ListNode} head
    # @return {ListNode}
    def sortList(self, head):
        def _megSort(head, length):
            if length<=1: 
                return head
            p=head
            subLen=0
            for _ in range((length-1)/2):
                p=p.next
                subLen+=1
            q=p.next
            p.next=None
            La=_megSort(head, subLen)
            Lb=_megSort(q, length-subLen)
            return _merge(La, Lb)

        def _merge(p, q):
            d=ListNode(-1)
            r=d
            while p and q:
                if p.val<q.val:
                    r.next=p
                    r=p
                    p=p.next
                else:
                    r.next=q
                    r=q
                    q=q.next
            while p:
                r.next=p
                r=p
                p=p.next
            while q:
                r.next=q
                r=q
                q=q.next
            return d.next

        p=head
        length=0
        while p:
            length+=1
            p=p.next
        return _megSort(head, length)

 

posted @ 2015-08-13 21:21  曾可爱  阅读(247)  评论(0编辑  收藏  举报