- 排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输入: 4->2->1->3
输出: 1->2->3->4
示例 2:
输入: -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.getmid(head)
rhead = mid.next
mid.next = None
return self.mergesort(self.sortList(head),self.sortList(rhead))
def getmid(self,head):
if not head or not head.next:
return None
slow = fast = head
while fast.next and fast.next.next:
fast = fast.next.next
slow = slow.next
return slow
def mergesort(self,lhead,rhead):
dummy = cur = ListNode(0)
while lhead and rhead:
if lhead.val <= rhead.val:
cur.next = lhead
lhead = lhead.next
else:
cur.next = rhead
rhead = rhead.next
cur = cur.next
cur.next = lhead or rhead
return dummy.next
本文介绍了一种在O(nlogn)时间复杂度和常数级空间复杂度下对链表进行排序的方法。通过递归地找到链表中点并断开链表,然后分别对两部分进行排序,最后合并两个已排序的部分。示例展示了如何将乱序链表转换为有序链表。
1827

被折叠的 条评论
为什么被折叠?



