LeetCode 147. 对链表进行插入排序

题目描述

147. 对链表进行插入排序

思路分析

插入排序

插入排序是一种简单直观的排序算法,适用于链表的排序。我们可以通过维护一个已排序的链表部分,将未排序的节点逐个插入到已排序部分的正确位置。具体步骤如下:

  1. 创建一个虚拟头节点 dummy,用于方便处理头节点的插入。
  2. 遍历原链表,对于每个节点,找到其在已排序链表中的插入位置。
  3. 将节点插入到已排序链表中。
  4. 继续处理下一个节点,直到所有节点都被插入。

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func insertionSortList(head *ListNode) *ListNode {
	dummy := &ListNode{}
	cur := head

	for cur != nil {
		// 保存下一个节点
		next := cur.Next
		// 找到插入位置
		pre := dummy
		for pre.Next != nil && pre.Next.Val < cur.Val {
			pre = pre.Next
		}
		// 插入节点
		cur.Next = pre.Next
		pre.Next = cur
		// 处理下一个节点
		cur = next
	}
	return dummy.Next
}

➡️ 点击查看 Java 题解

1
write your code here
本文作者:
本文链接: https://hgnulb.github.io/blog/2023/87842493
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!