面试算法-103-对链表进行插入排序

题目

给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头 。

插入排序 算法的步骤:

插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。

每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。

重复直到所有输入数据插入完为止。

下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。

对链表进行插入排序。

示例 1:

输入: head = [4,2,1,3]

输出: [1,2,3,4]

java 复制代码
class Solution {
    public ListNode insertionSortList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }

        ListNode dummy = new ListNode(0);
        dummy.next = head;

        ListNode p1 = dummy;

        while (p1.next != null) {
            ListNode p2 = p1;
            int min = Integer.MAX_VALUE;
            ListNode minPre = null;
            while (p2.next != null) {
                if (p2.next.val < min) {
                    min = p2.next.val;
                    minPre = p2;
                }
                p2 = p2.next;
            }

            ListNode minNode = minPre.next;
            if (minNode != null) {
                minPre.next = minNode.next;

                ListNode temp = p1.next;
                p1.next = minNode;
                minNode.next = temp;
            }
            p1 = p1.next;
        }
        return dummy.next;
    }
}
相关推荐
liliangcsdn4 分钟前
全期望公式在DDIM中的应用实例
算法·机器学习·概率论
橙露8 分钟前
视觉检测核心定位算法全解析:优缺点对比与场景选型指南
人工智能·算法·视觉检测
玄同76513 分钟前
Python&LLM面试易错点: 函数返回值全览:从「原地操作」到「新对象返回」的系统解析
笔记·python·学习·语言模型·面试·llm·求职招聘
csuzhucong17 分钟前
三明治魔方、凹凸魔方、小红帽魔方
算法
薛不痒18 分钟前
机器学习算法之K-means聚类和DBSCAN算法
算法·机器学习·kmeans
漫随流水21 分钟前
leetcode算法(1047.删除字符串中的所有相邻重复项)
算法·leetcode·
小尧嵌入式23 分钟前
c++一致性哈希实现BST二叉树实现及相关知识
服务器·c语言·开发语言·c++·算法·链表·哈希算法
都叫我大帅哥29 分钟前
PPO:那个让你在强化学习路上少摔几跤的“调酒师”
人工智能·算法·强化学习
YGGP30 分钟前
【Golang】LeetCode 160. 相交链表
leetcode·链表·golang
技术狂人16830 分钟前
(二)多模态大模型 15 题!GPT-4V/LLaVA 核心设计 + 显存优化,2026 面试必背(进阶篇)
人工智能·深度学习·自然语言处理·面试