题目描述:
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析: 时间复杂度为O(n log n),可采用快速排序法,将链表的第一个数字作为基准,比这个数小的数字放到左边,比它大的数放到右边,最后再进行合并。
class Solution:
def sortList(self, head):
if head is None or head.next is None:
return head
pivot = head
p = pivot
l1 = ListNode(0)
l2 = ListNode(0)
s ,f= l1,l2
tmp = head.next
while tmp is not None:
if tmp.val < pivot.val:
s.next = tmp
s = s.next
elif tmp.val == pivot.val:
p.next = tmp
p = p.next
else:
f.next = tmp
f = f.next
tmp = tmp.next
s.next,f.next,p.next = None,None,None
l3 = self.sortList(l1.next)
l4 = self.sortList(l2.next)
if l3 is not None:
l5 = l3
while l5.next is not None:
l5 = l5.next
l5.next = pivot
p.next = l4
return l3
else:
p.next = l4
return pivot