📅  最后修改于: 2023-12-03 14:54:57.369000             🧑  作者: Mango
在计算机科学中,数据结构是计算机存储、组织数据的方式。其中,单向链表是一种常见的数据结构,具有动态分配内存空间的优势,但是元素并不是固定有序的。
本文将介绍如何对单向链表进行排序。下面是一个简单的示例代码:
class Node:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def sortLinkedList(head: Node) -> Node:
if not head or not head.next:
return head
# 使用快慢指针找到中间节点
slow, fast = head, head
while fast.next and fast.next.next:
slow = slow.next
fast = fast.next.next
# 切分成两个链表
left, right = head, slow.next
slow.next = None
left_sorted = sortLinkedList(left)
right_sorted = sortLinkedList(right)
# 合并有序链表
dummy = Node()
curr = dummy
while left_sorted and right_sorted:
if left_sorted.val < right_sorted.val:
curr.next = left_sorted
left_sorted = left_sorted.next
else:
curr.next = right_sorted
right_sorted = right_sorted.next
curr = curr.next
curr.next = left_sorted if left_sorted else right_sorted
return dummy.next
代码中的 sortLinkedList
函数用来对单向链表进行排序,它的输入参数是单向链表的头结点 head
,返回的是排序后的头结点。该函数首先进行递归,将链表不断切割成两半,直到链表中只剩下一个结点或者没有结点。然后对有序的两个子链表进行合并,得到排序后的链表。
合并操作使用了一个虚拟头结点 dummy
,将两个有序链表合并成一个有序链表。具体实现是用指针 curr
不断指向较小值的结点,同时将该结点从链表中删去,直到其中一个链表已经全部加入到结果链表中,最后再将另一个链表加入到结果链表的末尾。
单向链表是一种常见的数据结构,但是其元素并不是固定有序的。本文介绍了如何对单向链表进行排序,具体实现是将链表不断切割成两半,对两个有序链表进行合并得到排序后的链表。