148. Sort List
Sort a linked list in O(n log n) time using constant space complexity.
Solution
利用归并排序的思想
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def sortList(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return head
p1 = p2 = pre = head
while p2 and p2.next:
pre = p1
p1 = p1.next
p2 = p2.next.next
pre.next = None
h1 = self.sortList(head)
h2 = self.sortList(p1)
return self.merge(h1, h2)
def merge(self, h1, h2):
p = ListNode(None)
l = p
while h1 and h2:
if h1.val < h2.val:
p.next = h1
h1 = h1.next
else:
p.next = h2
h2 = h2.next
p = p.next
p.next = h1 or h2
return l.next
"""
# 会出现超过最大递归次数的错误。RuntimeError: maximum recursion depth exceeded
def merge(self, h1, h2):
if not h1:
return h2
if not h2:
return h1
if h1.val < h2.val:
h1.next = self.merge(h1.next, h2)
return h1
else:
h2.next = self.merge(h1, h2.next)
return h2
"""