Sort a linked list in O(n log n) time using constant space complexity.
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def sortList(self, head: ListNode) -> ListNode:
if(head==None or head.next==None):
return head
slow=head
fast=head
while(fast!=None and fast.next!=None):
pre=slow
slow=slow.next
fast=fast.next.next
pre.next=None
l1=self.sortList(head)
l2=self.sortList(slow)
return self.merge(l1,l2)
def merge(self,l1:ListNode,l2:ListNode):
if(l1==None):return l2
if(l2==None):return l1
if(l1.val<l2.val):
l1.next=self.merge(l1.next,l2)
return l1
else:
l2.next=self.merge(l1,l2.next)
return l2
使用归并排序,使用快慢指针法,获取链表中点,使用合并有序双链表的方式,合并链表