classSolution:defsortList(self, head: ListNode)-> ListNode:ifnot head ornot head.next:return head #终止
slow,fast=head,head.next#快慢指针while fast and fast.next:
fast,slow=fast.next.next,slow.next
mid,slow.next=slow.next,None#中间分割,慢指针走到快的一半
left,right=self.sortList(head),self.sortList(mid)#左右分别递归排序
h=res=ListNode(0)while left and right:if left.val<right.val:
h.next,left=left,left.nextelse:
h.next,right=right,right.next
h=h.next#左右合并到一起
h.next=left if left else right
return res.next
最小栈
classMinStack:def__init__(self):"""
initialize your data structure here.
"""
self.stack=[]
self.min_stack=[math.inf]defpush(self, x:int)->None:
self.stack.append(x)
self.min_stack.append(min(x,self.min_stack[-1]))defpop(self)->None:
self.stack.pop()
self.min_stack.pop()deftop(self)->int:return self.stack[-1]defgetMin(self)->int:return self.min_stack[-1]