147. 对链表进行插入排序
147. 对链表进行插入排序
思路:
与数组插入排序的思路相同,都是先有一个有序序列,然后拿着待插入元素,在有序序列中找到正确的位置;
链表有序序列的初始化方式就是,先定义一个哨兵dummyNode,然后让head节点成为第一个有序的序列的元素,维护一个lastSortNode保存有序序列的最后一个元素。
其实就相当于从第一个元素开始每次拿有序序列的后边一个元素,放到正确的位置上,最后让所有的链表都有序了。
https://leetcode-cn.com/problems/insertion-sort-list/solution/dui-lian-biao-jin-xing-cha-ru-pai-xu-by-leetcode-s/
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode() {} * ListNode(int val) { this.val = val; } * ListNode(int val, ListNode next) { this.val = val; this.next = next; } * } */ class Solution { public ListNode insertionSortList(ListNode head) { ListNode dummyHead = new ListNode(0); dummyHead.next = head; ListNode lastSorted = head; ListNode cur = head.next; while (cur != null) { if (lastSorted.val < cur.val) { lastSorted = lastSorted.next; } else { // 从前往后找到合适的位置,将cur元素插入到链表中 ListNode pre = dummyHead; while (cur.val > pre.next.val) { pre = pre.next; } // 将cur从原来的链表中删除 lastSorted.next = cur.next; // 将cur添加到新排序链表中 cur.next = pre.next; pre.next = cur; } cur = lastSorted.next; } return dummyHead.next; } }
。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)