排序链表
2021-01-14 00:13
标签:pytho tps val ems temp www 复杂 span 快慢指针 难度 ?? 在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。 示例 1: 示例 2: 思路 \(O(nlogn)\)时间复杂度,分而治之,使用归并排序,数组归并排序代码可以看这里 coding 排序链表 标签:pytho tps val ems temp www 复杂 span 快慢指针 原文地址:https://www.cnblogs.com/gongyanzh/p/12943862.html148. 排序链表
输入: 4->2->1->3
输出: 1->2->3->4
输入: -1->5->3->4->0
输出: -1->0->3->4->5
# 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 not head or not head.next:
return head
#找到中间节点
mid = self.divide(head)
temp = mid.next
mid.next = None
#递归 合并
l = self.sortList(head)
r = self.sortList(temp)
return self.merge(l,r)
def divide(self,head):
#找到链表中间节点
if not head or not head.next:
return head
slow,fast = head,head.next.next
while fast and fast.next:
slow = slow.next
fast = fast.next.next
return slow
def merge(self,left,right):
#合并链表
new = ListNode(0)
curr = new
while left and right:
if left.val