当前位置: 首页 > article >正文

对链表进行插入排序

本节通过对链表进行插入排序,对之前所学的直接插入排序法进行灵活应用.采用直接插入排序法实现按照元素从小到大的顺序对链表进行排序.

解读要求,要将待排序的集合分为两部分,一部分是已排序的子集合,另一部分是待排序的集合.然后在待排序的集合中取出一个元素插入有序子集合中的合适位置,使子集合有序.

链表的定义结构如下:

class ListNode:
    def __init__(self,x):
        self.val = x
        self.next = None
        

要将链表分为两个部分,需要两个变量分别保存两个部分的头指针.

head变量:表示有序子链表的头指针

p变量:表示待排序链表的头指针,即head所指向的下一个位置,其代码如下:

p = head.next
head.next = None

然后对以p为头指针的未排序链表进行遍历,找到p节点应该插入的位置.

p_head变量:表示用于储存p的下一个位置节点的变量,以免p节点完成插入之后无法找到下一个待排序节点.因此在循环中,在对每一个节点找寻插入位置时应先将下一个待排序节点保存起来.

current变量:表示头节点,在寻找合适插入位置时向后遍历.

代码如下:

while(p is not None):
    p_head = p.next
    current = head

 接下来就是寻找插入位置的阶段,分为两种情况.一种是当p要插入位置在head头指针之前,不但要让p的下一个节点指向head,还要修改p为头指针.代码如下:

if(p.val<=head.val):
    p.next = head
    head = p

最后,更新p节点为起初保存的p_head节点,继续进行循环即可


http://www.kler.cn/a/398012.html

相关文章:

  • 计算机视觉 1-8章 (硕士)
  • 【Pikachu】XML外部实体注入实战
  • Jav项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)
  • 【ict基础软件赛道】真题-50%openGauss
  • 每天五分钟机器学习:支持向量机算法数学基础之核函数
  • MySQL缓存使用率超过80%的解决方法
  • 2024年11月16日Github流行趋势
  • 基于opencv制作GUI界面
  • wsl2配置文件.wslconfig不生效
  • 华为Mate 70临近上市:代理IP与抢购攻略
  • 10款PDF合并工具的使用体验与推荐!!
  • UE5材质篇 3 MaterialFunction
  • Jupyter Book 快捷键总结大全
  • Win11 安装与配置 Java环境 JDK(以JDK11为例)
  • MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准
  • 永磁电机的前生今世和未来?
  • 20241116解决在WIN11和ubuntu20.04通过samba共享时出现局域网千兆带宽拉满的情况
  • android studio新建activity提示 require androidX support
  • 2.操作系统常见面试问题3
  • 【安全通信】告别信息泄露:搭建你的开源视频聊天系统briefing
  • Acrobat Pro DC 2023(pdf免费转化word)
  • 从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改
  • redis和mongodb等对比分析
  • 机器学习—Additional Layer Types
  • 零基础利用实战项目学会Pytorch
  • 力扣 —— 2341.数组能形成多少数对