码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode147之对链表进行插入排序(相关话题:链表)


    题目描述

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

    插入排序 算法的步骤:

    1. 插入排序是迭代的,每次只移动一个元素,直到所有元素可以形成一个有序的输出列表。
    2. 每次迭代中,插入排序只从输入数据中移除一个待排序的元素,找到它在序列中适当的位置,并将其插入。
    3. 重复直到所有输入数据插入完为止。

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

    对链表进行插入排序。

    示例 1:

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

    示例 2:

    输入: head = [-1,5,3,4,0]
    输出: [-1,0,3,4,5]
    

    提示:

    • 列表中的节点数在 [1, 5000]范围内
    • -5000 <= Node.val <= 5000

    解题思路

    1. 创建一个新的空链表(dummy node),作为已排序部分。
    2. 遍历原链表,对于每一个节点,执行以下操作:
       a. 从已排序链表的头部开始,找到第一个大于或等于当前节点值的节点。
       b. 将当前节点插入到找到的节点之前。
       c. 如果当前节点是原链表的最后一个节点,那么将已排序链表的尾部节点的 next 指针指向 null。
    3. 遍历结束后,已排序链表即为插入排序后的链表。

    代码实现

    1. class ListNode:
    2. def __init__(self, x):
    3. self.val = x
    4. self.next = None
    5. def insertionSortList(head):
    6. if not head or not head.next:
    7. return head
    8. dummy = ListNode(-1) # 创建一个 dummy node 作为已排序链表的头部
    9. cur = head
    10. while cur:
    11. next_node = cur.next # 保存当前节点的下一个节点
    12. sorted_cur = dummy # 从已排序链表头部开始遍历
    13. # 找到第一个大于或等于当前节点值的节点
    14. while sorted_cur.next and sorted_cur.next.val < cur.val:
    15. sorted_cur = sorted_cur.next
    16. # 将当前节点插入到已排序链表
    17. cur.next = sorted_cur.next
    18. sorted_cur.next = cur
    19. cur = next_node # 继续遍历原链表
    20. return dummy.next # 返回已排序链表

    链表问题

    LeetcCode146之LRU 缓存机制(相关话题:双向链表,哈希表)_哈希map 删除 时间复杂度 双向链表_数据与后端架构提升之路的博客-CSDN博客


    LeetCode025之K 个一组翻转链表(关话题:递归,链表逆序)_数据与后端架构提升之路的博客-CSDN博客


    LeetCode426之将二叉搜索树转化为排序的双向链表(相关话题:双向链表,二叉树中序)_将二进制搜索树转换为排序的循环双链表【问题描述】(利用链表二叉树)给定一个二进_数据与后端架构提升之路的博客-CSDN博客


    LeetCode114之二叉树展开为链表(相关话题:二叉树,递归)_数据与后端架构提升之路的博客-CSDN博客

    LeetCode之024两两交换链表中的节点(相关话题:链表递归迭代)_leetcode024_数据与后端架构提升之路的博客-CSDN博客


    LeetCode142之环形链表 II(相关话题:快慢指针,绘图分析)_数据与后端架构提升之路的博客-CSDN博客

    LeetCode002之两数相加(相关话题:链表操作)_数据与后端架构提升之路的博客-CSDN博客

  • 相关阅读:
    【京东开源项目】微前端框架MicroApp 1.0正式发布
    雷达仿真:FMCW DDMA-MIMO 3D点云获取方法
    重复导航到当前位置引起的。Vue Router 提供了一种机制,阻止重复导航到相同的路由路径。
    关于Rxjava的简单使用
    数据分析入门指南:从基础概念到实际应用(一)
    【牛客网面试必刷】链表篇
    66. 加一、Leetcode的Python实现
    vc websocket简单测试
    亚信科技AntDB数据库携“U8C+AntDB联合产品”亮相“2023全球商业创新大会”,开启生态合作新篇章
    需要达到什么样的水平才能找到一份看起来不错的互联网实习?
  • 原文地址:https://blog.csdn.net/JiShuiSanQianLi/article/details/132783124
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号