leetcode 147. Insertion Sort List (链表插入排序)

从URDF到Gazebo:一个完整的ROS2机械臂仿真与运动控制实战指南 本文提供了一个完整的ROS2机械臂仿真与运动控制实战指南。详细讲解了从URDF建模、ROS2 Control配置到Gazebo物理仿真的全流程,重点介绍了如何利用MoveIt2快速搭建高级运动规划系统,并解决实际部署中的常见问题,帮助开发者高效、安全地进行机器人算法验证与开发。 阅读详情

Given the head of a singly linked list, sort the list using insertion sort, and return the sorted list’s head.

The steps of the insertion sort algorithm:

Insertion sort iterates, consuming one input element each repetition and growing a sorted output list.
At each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list and inserts it there.
It repeats until no input elements remain.
The following is a graphical example of the insertion sort algorithm. The partially sorted list (black) initially contains only the first element in the list. One element (red) is removed from the input data and inserted in-place into the sorted list with each iteration.

在这里插入图片描述
Constraints:

The number of nodes in the list is in the range [1, 5000].
-5000 <= Node.val <= 5000

本题是链表的插入排序,遍历单向链表的每个node,删除该node,插入到正确的位置,使整个链表的节点从小到大排列。

思路:
比较纠结的就是指针问题,用几个指针,怎么移动。

因为是单向链表,如果删除node的话,需要知道当前node的前一个节点preNode, 通过修改preNode.next来删除当前node

还需要维护一段已经排好序的链表,分解线就是当前node,它的前半段是已经排好序的,后半段是待删除和插入的部分
这两段都需要两个指针,一个指向前面节点的preNode, 一个指向当前节点的curNode

head节点是会变的,因为如果在head前插入node,head就需要重新指向最前面的node
为了不频繁变动head,我们重新声明一个newHead,最开始用newHead.next指向head,
那么后续只需要变动newHead.next即可,最后返回newHead.next

前半段我们可以不用两个指针,只用一个指针代替preNode和curNode, 怎么做到呢,这就是newHead的好处,
我们声明一个tmp,指向newHead,用tmp.next表示curNode, tmp本身表示preNode

另外,在遍历后半段preNode和curNode时,如果preNode <= curNode时可以直接跳过的,因为已经排好序了
preNode > curNode时,删掉curNode, 遍历前半段,那肯定想问了,遍历的终止条件是什么呢?
这时注意到这个遍历的前提是preNode > curNode, 那么肯定会有node的值>curNode, 一定会停下来插入值,插值结束后就跳出了

不要忘了删除完curNode后,把curNode移动到preNode.next的位置

//2ms
    public ListNode insertionSortList(ListNode head) {
        if(head == null || head.next == null) return head;
        ListNode newHead = new ListNode();
        newHead.next = head;
        
        ListNode tmpNode = newHead;
        ListNode preNode = head;
        ListNode curNode = head.next;
        
        while(curNode != null) {
            if(preNode.val <= curNode.val) {
                preNode = preNode.next;
                curNode = curNode.next;
            } else {
                tmpNode = newHead;
                while(tmpNode.next.val <= curNode.val) {
                    tmpNode = tmpNode.next;
                }
                preNode.next = curNode.next;
                curNode.next = tmpNode.next;
                tmpNode.next = curNode;
                curNode = preNode.next;
            }
            
        }
        return newHead.next;
    }
【QT开发教程】如何在Qt中使用Protobuf进行高效数据序列化 Protocol Buffers(Protobuf)是Google开发的一种语言中立、平台中立、可扩展的序列化机制,常用于数据交换和存储。Qt作为一个跨平台的C++图形用户界面应用框架,可以与Protobuf结合使用,实现高效的数据序列化和反序列化。本文将介绍如何在Qt中集成和使用Protobuf,包括基本概念、安装步骤、使用示例以及实际应用。 阅读详情

相关推荐

STM32F4系列HAL库配置定时器实验——输入捕获

STM32F4系列HAL库配置定时器实验——输入捕获 输入捕获简单讲解 输入捕获模式可以用来测量脉冲宽度或者测量频率。我们以测量周期和频率为例,用一个简图来说明输入捕获的原理 假定定时器工作在向上计数模式, 图中 t1~t2 时间,就是我们需要测量的高电平时间。测量方法如下:首先设置定时器通道 x 为 上升沿捕获,这样,t1 时刻,就会捕获到当前的 CNT 值,然后立即清零 CNT,并设置通道 x为下降沿捕获,这样到 t2 时刻,又会发生捕获事件,得到此时的 CNT 值,记为 CCRx2。这样,根据定时器

azs0504的博客 9285

2012级计算机导论试题,2012级计算机导论试题A卷(答案在另一部分上传)

4. Change the -13.80625 decimal numbers to binary numbers, and show it in 32-bit IEEE format,and then convert the result to hexadecimal.5. A gray scale picture is digitized using 256 different gray le...

weixin_42128558的博客 260

IOS APP上架被拒 4.3(a) - Design - Spam,成功

成功解决IOS APP上架被拒 4.3(a) - Design - Spam,本篇博客记录了详细过程

qq_40147106的博客 6904

Java排序链表

剑指offer 148.排序链表 解题思路: 由时间复杂度O(nlogn)知道我们可以使用归并排序 归并排序经常会出现在合并两个有序链表这样类似的题中 定义fast指针和slow指针, 利用fast和slow将链表从中点分为两个链表 ① 对应操作: slow = slow.next; fast = fast.next.next; 此时slow指针刚好停在链表的中点 ② 将链表从中间断开的操作: slow.next = null; ③ 此时左右两个断开的链表的第一个节点分别为head和tmp 对.

LX__dream的博客 3286

从理论到实践:TRL去嵌入校准在国产矢量网络分析仪上的应用全解析

本文全面解析了TRL去嵌入校准技术在国产矢量网络分析仪上的应用实践,从核心算法到工程实现。详细介绍了TRL校准的数学原理、国产VNA的程控接口开发、校准件质量评估及测量不确定度控制策略,帮助工程师掌握高频器件测量的关键技术。

tech5的博客 1011

单目和多目视觉统一标定

单目和多目视觉统一标定 一.单目视觉标定 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,这些几何模型参数就是相机参数。在大多数条件下这些参数必须通过实验与计算才能得到,这个求解参数的过程就称之为相机标定(或摄像机标定)。无论是在图像测量或者机器视觉应用中,相机参数的标定都是非常关键的环节,其标定结果的精度及算法的稳定性直接影响相机工作产生结果的准确性。因此,做好相机标定是做好后续工作的前提,提高标定精度是科研工作的重点所在

吴建明wujianming_110117 2911

算法:链表实现插入排序Insertion Sort List

题目 147. Insertion Sort List Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list. With each iteration one element (red) is removed from the in

AI架构师易筋 546

全球最大光伏电池缺陷异常检测数据集PVELAD【发布】

下载地址 1:GitHub - binyisu/PVEL-AD 下载地址 2:http://aihebut.com/col.jsp?id=118 下载地址 3:NAVEDownload 竞赛测试系统:Photovoltaic cell anomaly detection | Kaggle 一、简介 PVEL-AD 数据集又叫做EL2021数据集是用于对光伏电池异常缺陷检测方法进行基准测试的数据集,重点是光伏电池工业检测。PVEL-AD包含 36,543 张具有各种内部缺陷和异构背...

苏打水的杯子的博客 2万+

[Leetcode学习-java]Insertion Sort List(链表插入排序)

问题: 难度:medium 说明: 一个无序链表,将里面的元素按值从小到大排序。 问题链接:https://leetcode.com/problems/insertion-sort-list/ 输入案例: Example 1: Input: 4->2->1->3 Output: 1->2->3->4 Example 2: Input: -1->5->3->4->0 Output: -1->0->3->4->5

qq_28033719的博客 173

通达信主力检测利器

主力轨迹:100*EMA(EMA(MTM,N1),N1)/EMA(EMA(ABS(MTM),N1),N1),COLORWHITE;主力拉高:IF(VAR51<REF(VAR51,1),VAR51,0),COLORYELLOW,NODRAW;洗盘:IF(VAR5<REF(VAR5,1),VAR5,0),COLOR000079,NODRAW;主力进场:IF(VAR5>REF(VAR5,1),VAR5,0),COLORRED,NODRAW;MAZL:MA(主力轨迹,N2),COLORYELLOW;

zhibiaogong的博客 7451

全局–局部傅里叶神经算子(GL-FNO):原理、严格推导与 PINN 混合策略

本文提出了一种全局-局部傅里叶神经算子(GL-FNO)及其与物理信息神经网络(PINN)的结合方法。主要内容包括: 架构设计:GL-FNO包含两个分支 - 全局分支处理低频结构,使用下采样输入;局部分支处理高频细节,使用全分辨率输入。两分支通过自适应门控机制融合。 理论分析:证明了GL-FNO在"低频全局+高频局部"任务上的优势,给出了误差分解和复杂度分析,并推导了与PINN结合时的渐进一致性条件。 实现方法:采用频谱微分计算物理残差,推导了完整的训练流程,包括数据损失与物理损失的联合优

VectorShift的博客 1330

链表排序算法(Java实现)

插入排序        对链表进行插入排序,是最简单的一种链表排序算法,用于插入排序是迭代的,所以每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。        每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。重复直到所有输入数据插入完为止。        插入排序的时间复杂度为O(N^2),空间复杂度为O(1) cla

CY2333333的博客 2505

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetcode 147. Insertion Sort List-链表插入排序

原题链接:147. Insertion Sort List 【思路-Java】 插入排序 public class Solution { public ListNode insertionSortList(ListNode head) { ListNode dummyHead = new ListNode(0), p = head; dummyH

hdtopku 3612

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

LeetCode147 Insertion Sort List 链表插入排序

Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list. With each iteration one element...

李歇特冯-兹拜因巴哈的博客 229

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

题目描述 对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 ...

it-hao的博客 286

Leetcode 147.对链表进行插入排序(Insertion Sort List)

Leetcode 147.对链表进行插入排序 1 题目描述(Leetcode题目链接)   对链表进行插入排序。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。 重复直到所有输入数据插入完为止。 输入: 4->2->1->3 输出: ...

qq_39378221的博客 219

Leetcode147. Insertion Sort List对链表进行插入排序

对链表进行插入排序。 从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中...

Ha12312的博客 181

leetcode 147. Insertion Sort List链表的插入排序

A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list. With each iteration one element (red) is removed from the input data and i...

zhpf225的博客 132

Leetcode刷题记——147. Insertion Sort List(插入排序链表)

一、题目叙述: Sort a linked list using insertion sort. 二、解题思路: Medium题,啊。。。我今天头晕脑胀,写的不太顺利。代码之混乱,我现在提交成功了都还很迷。 使用插入排序的方法对链表进行排序,即每次和前面的结点比找到合适的位置插入,链表不同于数组的地方在于,只能从前往后比,找到第一个比目前结点值大的结点,

爱胡椒的小白兔呢 575

[leetcode]147. Insertion Sort List (链表的插入排序)

Solution 1:TLE 这个方法整个list没有断开 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { ...

Belle_Chou的博客 532

【LeetCode】#147对链表进行插入排序(Insertion Sort List)

【LeetCode】#147对链表进行插入排序(Insertion Sort List) 题目描述 对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭...

weixin_43858604的博客 221

【Leetcode】147. Insertion Sort List(链表实现插入排序)

Sort a linked list using insertion sort. A graphical example of insertion sort. The partial sorted list (black) initially contains only the first element in the list. With each iteration one element...

小I的博客 223

leetcode 147. Insertion Sort List 链表插入排序

Sort a linked list using insertion sort.本题就是要做链表的插入排序。代码如下:/*class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }*//* * 链表的插入排序 * */ public class Solution {

JackZhangNJU的专栏 410

[LeetCode147]Insertion Sort List(链表插入排序)

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* in

Rain 454

LeetCode-147. Insertion Sort List (JAVA)链表插入排序

LeetCode-147. Insertion Sort List (JAVA)链表插入排序

mine_song的博客 1510

LeetCode 147. 对链表进行插入排序(Insertion Sort List)

题目描述 对链表进行插入排序。 插入排序的动画演示如上。从第一个元素开始,该链表可以被认为已经部分排序(用黑色表示)。 每次迭代时,从输入数据中移除一个元素(用红色表示),并原地将其插入到已排好序的链表中。 插入排序算法: 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。 每次迭代中,插入排序只从输入数据中移除一个待排序的...

weixin_30825199的博客 153
上一篇: jetson nx tensorRT: 使用engine文件进行网络推理(语意分割,内存零copy,同步异步inference)
下一篇: leetcode 310. Minimum Height Trees(最小高度树)
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值