单链表排序算法从小到大
时间: 2023-07-22 22:25:57 浏览: 90
单链表实现从小到大排序
4星 · 用户满意度95%
单链表排序算法可以采用插入排序或归并排序,这里给出一个基于插入排序的示例代码:
```python
def insert_sort(head):
if not head or not head.next:
return head
dummy = ListNode(0) # 创建一个辅助节点
pre = dummy
cur = head
while cur:
next_node = cur.next # 记录下一个节点
# 找到插入位置
while pre.next and pre.next.val < cur.val:
pre = pre.next
# 插入节点
cur.next = pre.next
pre.next = cur
pre = dummy # 重置pre指针
cur = next_node # 处理下一个节点
return dummy.next
```
算法思路:
1. 创建一个辅助节点dummy,将其指向head。
2. 定义两个指针pre和cur,初始时pre指向dummy,cur指向head。
3. 遍历链表,对于每个节点cur,记录其下一个节点next_node,然后在已排序的链表中找到插入位置,并将其插入。
4. 重置pre指针为dummy,cur指针为next_node,继续遍历链表,直到所有节点都被插入。
5. 返回dummy.next作为排序后的链表头节点。
时间复杂度为O(n^2),空间复杂度为O(1)。如果要优化时间复杂度,可以采用归并排序等高效算法。
阅读全文