题目描述:
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -1->5->3->4->0
输出: -1->0->3->4->5
class ListNode(object):
'''定义创建链表节点的类'''
def __init__(self, val, next = None):
self.val = val
self.next = next
def sort_linked_list(head):
# 分而治之,归并算法,涉及到链表排序的,可以考虑合并两个链表的方法
# 合并两个链表
def merge_two_linked_list(l1, l2):
if not l1:
return l2
if not l2:
return l1
if l1.val < l2.val:
cur = l1
cur.next = merge_two_linked_list(l1.next, l2)
else:
cur = l2:
cur.next = merge_two_linked_list(l1, l2.next)
return cur
if not head or not head.next:
return head
slow, fast = head, head.next
while fast and fast.next:
slow, fast = slow.next, fast.next.next
mid, slow = slow.next, None
left = sort_linked_list(head)
right = sort_linked_list(mid)
return merge_two_linked_list(left, right)