对单个链表进行排序是一个常见的编程问题,可以使用多种排序算法来实现。以下是一个简单的基于归并排序的实现:
以下是一个使用Python实现的示例代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def sortList(head: ListNode) -> ListNode:
if not head or not head.next:
return head
# 递归地将链表分成两半
slow, fast = head, head.next
while fast and fast.next:
slow = slow.next
fast = fast.next.next
mid = slow.next
slow.next = None
# 递归地对两个子链表进行排序
left, right = sortList(head), sortList(mid)
# 合并两个子链表
dummy = ListNode()
cur = dummy
while left and right:
if left.val< right.val:
cur.next = left
left = left.next
else:
cur.next = right
right = right.next
cur = cur.next
cur.next = left or right
return dummy.next
这个实现的时间复杂度为O(nlogn),其中n是链表的长度。虽然归并排序的时间复杂度比快速排序和堆排序要慢,但是它的空间复杂度为O(1),因为它不需要额外的空间来存储数据。
领取专属 10元无门槛券
手把手带您无忧上云