刷题日记《链表01》

news2024/11/18 14:31:07

题目概述(力扣)

给定循环单调非递减列表中的一个点,写一个函数向这个列表中插入一个新元素 insertVal ,使这个列表仍然是循环升序的。

给定的可以是这个列表中任意一个顶点的指针,并不一定是这个列表中最小元素的指针。

如果有多个满足条件的插入位置,可以选择任意一个位置插入新的值,插入后整个列表仍然保持有序。

如果列表为空(给定的节点是 null),需要创建一个循环有序列表并返回这个节点。否则。请返回原先给定的节点。

  

解题思路

使用双指针作为基本实现方法,主要针对不同的情况进行不同的情况处理,主要分为以下五种情况:
1.插入的数据在链表中处于中间值部分(链表中目前已存在比它大的值,也存在比它小的值)

对于这种情况,我们只需要使用双指针进行遍历,cur和next,当插入的值大于cur元素的值并且小于next元素值时,直接将与该元素插入该位置即可

2.当前链表不存在或者只存在一个元素

当链表中只存在一个元素时,无论插入的元素值与原来元素值的大小关系,直接插入到当前元素后面即可,由于考虑到是链表的数据结构,我们没有办法直接求其长度,所以如果cur指针重新回到了head结点,则认为这就是这个结点应该插入的位置

3.当前链表存在多个元素,但是每个元素的值均相等,由于没办法通过比较元素大小来判断元素的插入位置,所以依然是当cur指针指回head结点时,在此位置进行插入即可

4.当前插入元素的值大于当前链表中的全部元素,找到链表中最大和最小值的交界处进行插入即可

5.当前插入元素的值小于当前链表中的全部元素,找到链表中最大和最小值的交界处进行插入即可

代码实现

class Solution {
    public Node insert(Node head, int insertVal) {
        //实现思路:使用双指针遍历链表
        //非空校验
        if(head==null){
            head=new Node(insertVal);
            head.next=head;
            return head;
        }
        //插入的元素值处于链表元素值大小的中间位置,进行遍历循环
        Node next=head.next;
        Node cur=head;
        //进行遍历
        boolean flag=true;
        Node newNode=new Node(insertVal);
        while(flag){
            if(insertVal>=cur.val&&insertVal<=next.val){
                //进行插入结点
                newNode.next=cur.next;
                cur.next=newNode;
                return head;
            }
            //如果是当前链表中不存在比要插入的值大或者小的元素
            if(cur.next.val<cur.val&&(cur.next.val>=insertVal||cur.val<insertVal)){
                newNode.next=cur.next;
                cur.next=newNode;
                return head;
            }
            //处理只有一个结点或者结点全相等
            if(cur.next==head){
                //链表中只有一个元素或者所有的元素的值均相等
                newNode.next=head;
                cur.next=newNode;
                return head;
                
            }
            cur=cur.next;
            next=next.next;
        }
        return head;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/692055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud-13_Alibaba OSS

对象存储 OSS 就是所谓的“图床”吗&#xff1f;&#xff08;致敬yupi /捂脸&#xff09; 一图说明&#xff1a; 阿里云对象存储oos 阿里云对象存储 OSS&#xff08;Object Storage Service&#xff09;是一款海量、安全、低成本、高可靠的云存储服务&#xff0c;提供最高可达 …

汉王人脸考勤管理系统 万能密码登录 漏洞复现

fofa&#xff1a;title“汉王人脸考勤管理系统” 漏洞复现 登录页面&#xff1a; 使用万能密码登录 用户名&#xff1a;or’ or 11– 密码&#xff1a;or

Minio的使用

今天学习的时候用到了阿里云的OSS&#xff0c;由于在公司项目上用到了Minio作为云端文件服务器&#xff0c;因此学习了以下Minio&#xff0c;打算替换掉阿里云的OSS 1.Minio的安装 在这里提供了Docker-compose的模式作为Minio的下载(其中9002作为API请求接口端&#xff0c;90…

Matlab【旅行商问题】—— 基于模拟退火算法的无人机药品配送路线最优化

文章目录 问题描述模拟退火算法Metropolis准则算法流程图&#xff1a; Demo1&#xff1a;只考虑累计距离&#xff0c;通过模拟退火算法求解最短路径matlab代码&#xff1a;最优解之一&#xff1a;适应度进行曲线&#xff1a; Demo1&#xff1a;考虑每个站点的病人数量&#xff…

Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析

专题一 地下水数值软件的操作流程、建模步骤和所需资料处理及相关注意事项 [1] Visual MODFLOW Flex特征 [2] Visual MODFLOW Flex软件界面及模块 [3] 地下水数值模拟的建模步骤及数据需求 专题二 模型建模操作方法 技巧、真实案例演练、特殊问题处理 [1] 直接模型建模的操…

深入浅出设计模式 - 装饰者模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

Python桌面应用开发之PyQt

文章目录 引言&#xff1a;桌面应用开发三大框架介绍一、PyQT介绍二、安装三、使用教程(1)基础窗口(2)分区布局窗口(类似于html中div的使用)(3)栅格布局窗口(类似于html中的table)(4)表单布局窗口(类似于html中的form)(5)事件函数与事件过滤器(6)信号和槽四、实战示例(1)状态栏…

跨链协议悄然升级

当前加密产业公链百家争鸣&#xff0c;群雄割据&#xff0c;每条公链都拥有自身的忠实用户。 然而&#xff0c;公链与公链之间仿佛一座座孤岛&#xff0c;无法进行无缝的交流和联系&#xff0c;仅能通过跨链桥经由在两条不同的链上运用不同处理机制来协助转移用户的资产。但&a…

【深度学习 | CNN】“深入解析卷积神经网络与反卷积:从原理到应用的全面指南” (从一维、二维、三维讲解)

🤵‍♂️ 个人主页: @AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!🐱‍🏍 🙋‍♂️声明:本人目前大学就读于大二,研究兴趣方向人工智能&硬件(虽然硬件还没开始玩…

MySQL数据库的MHA高可用集群部署及故障切换(图文详解!绝对详细!!)

目录 一、MHA概述 1、MHA简介 2、MHA 的组成 &#xff08;1&#xff09;MHA Node&#xff08;数据节点&#xff09; &#xff08;2&#xff09;MHA Manager&#xff08;管理节点&#xff09; 3、MHA 的特点 二、 搭建MySQLMHA 1、实验思路 2、修改mysql节点的主机名 3&…

JS 事件委托

JavaScript事件委托&#xff08;Event delegation&#xff09;又叫事件代理&#xff0c;是一种在父元素上监听事件&#xff0c;然后通过事件冒泡机制来处理子元素的事件的技术。通过事件委托&#xff0c;可以避免为每个子元素都绑定事件处理程序&#xff0c;提高性能并简化代码…

SC7504运算放大器(OPA)可pin对pin兼容OPA4350

SC750x 系列轨至轨 CMOS 运算放大器针对低电压单电源运行进行了优化。轨至轨输入和输出、低噪声(5nV/√Hz) 和高速运行(38MHz, 22V/μs) 使得运算放大器非常适合驱动模数 (A/D) 转换器。可pin对pin兼容OPA4350。而且也适用于手机功率放大器 (PA) 控制环路和视频处理&#xff08…

【嵌入式Qt开发入门】初识Qt——Linux下安装Qt

Qt 是什么&#xff1f; Qt 是一个跨平台的 C开发库。主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;简 称 GUI&#xff09;程序。 Qt 虽然经常被当做一个 GUI 库&#xff0c;用来开发图形界面应用程序&#xff0c;但这并不是 Qt 的全部&#xff1b…

Win11总是出现BitLocker恢复,想要彻底关闭它该如何操作?

win11解除bitlocker加密方法一&#xff1a; 1、首先按下键盘“WinR”打开运行(如图所示)。 2、打开运行后&#xff0c;在其中输入“control”并点击“确定”打开控制面板(如图所示)。 3、打开后&#xff0c;进入“bitlocker驱动器加密”(如图所示)。 4、随后展开被加密的磁盘&…

Pycharm报错Non-zero exit code (2)

问题现象&#xff1a; 通常我们拿到一个Python项目后&#xff0c;项目中有requirement.txt文件&#xff0c;里面有列出需要安装的三方库&#xff0c;使用pycharm直接安装这些库时&#xff0c;报错&#xff1a;Non-zero exit code (2) 解决方案&#xff1a; 第一种临时解决方案&…

模糊图片秒转高清图,分享几个免费方法!

相信大家都曾经遇到过拍摄的老旧照片放大后变得模糊不清的情况。然而&#xff0c;由于这些照片是我们自己拍摄的&#xff0c;我们也无法在网上找到并下载原始高清图像。那么&#xff0c;有没有什么方法可以修复这种模糊不清的照片呢&#xff1f;当然&#xff0c;很多人可能会说…

计算机硬件

硬盘 固态硬盘&#xff08;SSD&#xff09;拥有比机械硬盘&#xff08;HDD&#xff09;更快的读写速度。目前大多数机器使用的是SATA总线标准&#xff0c;实际最高传输约为600MB/s。而支持PCIe总线&#xff0c;NVMe协议的SSD&#xff0c;实际传输速度将超过1000MB/s。 当前采…

KDG5V-8-33C330N200-EX-H-M-U-H1-20比例方向阀控制器

与外置电子放大器一起使用&#xff0c;在智能控制系统和液压系统之间提供接口。这是一种非常实用的方法&#xff0c;用于控制执行器的方向和速度&#xff0c;同时消除了机器负载的快速加速和减速所引起的冲击。除了提高机器的性能和寿命外&#xff0c;通过将方向和流量控制能力…

【UE5 Cesium】04-Cesium for Unreal 将不同地区的倾斜摄影作为不同子关卡

上一篇&#xff1a;【UE5 Cesium】03-Cesium for Unreal 添加本地数据集 步骤 1. 新建一个空白关卡 保存新建的关卡&#xff0c;命名为“Globe” 添加地图 再添加“Cesium SunSky”和“DynamicPawn” 在大纲中选中“Globe&#xff08;编辑器&#xff09;”&#xff0c;然后勾…

深入浅出设计模式 - 享元模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…