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

【Leetcode——排序的循环链表】

😊😊😊

文章目录

  • 一、力扣题之排序循环链表
  • 二、解题思路
    • 1. 使用双指针法
    • 2、找出最大节点,最大节点的下一个节点是最小节点,由此展开讨论
  • 总结


一、力扣题之排序循环链表

题目如下:航班直达!!

在这里插入图片描述

二、解题思路

刚看到直到题我还是很迷的,没有写过类似的题目。
当我看到官方题解时,嘿嘿嘿三个字形容此时的心情。
首先需要知道,这道题是升序的,但是当我们找到最大节点时,最大节点的next是最小节点,这是循环链表的缘故

1. 使用双指针法

双指针在链表这块题目还是特别特别好用的。

定义一个cur指针指向头节点,next指针指向头节点的下一个节点,这是初始状态。

这里需要分几种情况来讨论,拿题目的样例来看:
在这里插入图片描述

对插入数据的大小不同,分为几种情况:

1)当 insertVal大于cur的值,并且insertVal小于next的值时,
此时insertVal介于cur和next之间,插入它们之间即可。

2)当insertVal大于cur的值,并且cur的值大于next的值时,
此时cur是链表中的MAX节点,next是链表中的MIN节点。
而insertVal大于MAX节点,所以只需在cur和next之间插入即可。

3)当cur大于next的值,表明cur是MAX节点,next是MIN节点,并且insertVal的值小于next的值,此时insertVal小于MIN,只需在cur和next之间插入即可。

以上三种情况:都是在cur和next之间插入。

4)而如果链表为空,更容易了,题目也已经给出,如果链表为空,只需要返回插入的节点即可。

	Node*insertnode = (Node*)malloc(sizeof(Node));insertnode->val = insertVal;insertnode->next = NULL;//链表为空if(head == NULL){insertnode->next = insertnode;return insertnode;}

5)如果链表只有一个节点,那么也不用遍历了,在head后面插入即可,一定是有序的。

    //只有一个节点if(head->next == head){insertnode->next = head;head->next = insertnode;return head;}

对于链表中的节点全部相同的情况,在哪里插入都可以,这种情况已经包含在上面三种情况的一种处理了,无需再单独处理。

总代码如下:

typedef struct Node Node;struct Node* insert(struct Node* head, int insertVal) {Node*insertnode = (Node*)malloc(sizeof(Node));insertnode->val = insertVal;insertnode->next = NULL;//链表为空if(head == NULL){insertnode->next = insertnode;return insertnode;}//只有一个节点if(head->next == head){insertnode->next = head;head->next = insertnode;return head;}//两个节点及以上struct Node*cur = head,*next = head->next;while(next!=head){//以下三种情况都是在cur和next之间插入if(cur->val<=insertVal && insertVal<=next->val){break;}else if(cur->val<=insertVal && cur->val>next->val){break;}else if(cur->val>next->val && insertVal<=next->val){break;}cur = next;next = next->next;}insertnode->next = next;cur->next = insertnode;return head;
}

2、找出最大节点,最大节点的下一个节点是最小节点,由此展开讨论

第一步1)先找出最大节点,最大节点的下一个节点是最小节点,分别记录下来。

第二步2)分情况讨论:情况与第一种方法差不多,唯一不同的是:
1、当insertVal大于最小值,并且insertVal小于最大值,此时需要从最小的节点开始遍历,直到找到第一个节点的val值大于insertVal,在该节点前面插入即可。

2、当insertVal大于cur的值,并且cur的值大于next的值时,
此时cur是链表中的MAX节点,next是链表中的MIN节点。
而insertVal大于MAX节点,所以只需在cur和next之间插入即可。

3、当cur大于next的值,表明cur是MAX节点,next是MIN节点,并且insertVal的值小于next的值,此时insertVal小于MIN,只需在cur和next之间插入即可。

同样,需要在前面考虑空链表的特殊情况,而一个节点的特殊情况下面可以处理。

struct Node* insert(struct Node* head, int insertVal) 
{Node*insertnode = (Node*)malloc(sizeof(Node));insertnode->val = insertVal;insertnode->next = NULL;//特殊情况if(head == NULL){insertnode->next = insertnode;return insertnode;}//1.找到最大节点Node*maxnode = head, *cur = head,*next = head->next;int max = head->val;while(next!=head){if(max<=next->val){max = next->val;maxnode = next;}cur = next;next = next->next;}//找到最大节点了//最大节点的next就是最小节点Node*minnode = maxnode->next;//2.分情况讨论//1)如果insertnode的val大于最大的或者小于最小的,则插入点在最大和最小节点之间if(insertVal>=maxnode->val || insertVal<=minnode->val){insertnode->next = minnode;maxnode->next = insertnode;return head;}//2)如果介于最大和最小节点之间,则从最小节点开始遍历//直到找到第一个比insertnode大的节点cur = minnode;next = minnode->next;while(next->val<insertVal){cur = next;next = next->next;}//找到了insertnode->next = next;cur->next = insertnode;return head;
}

总结

第一次做到循环排序链表的题,爽歪歪,写起来很舒服,链表的题需要勤快画图分析,分析二十分钟,写代码十分钟。

相关文章:

【Leetcode——排序的循环链表】

&#x1f60a;&#x1f60a;&#x1f60a; 文章目录一、力扣题之排序循环链表二、解题思路1. 使用双指针法2、找出最大节点&#xff0c;最大节点的下一个节点是最小节点&#xff0c;由此展开讨论总结一、力扣题之排序循环链表 题目如下&#xff1a;航班直达&#xff01;&#…...

ChatGPT研究分享:机器第一次开始理解人类世界目录

0、为什么会对ChatGPT感兴趣一开始&#xff0c;我对ChatGPT是没什么关注的&#xff0c;无非就是有更大的数据集&#xff0c;完成了更大规模的计算&#xff0c;所以能够回答更多的问题。但后来了解到几个案例&#xff0c;开始觉得这个事情并不简单。我先分别列举出来&#xff0c…...

【linux】Linux基本指令(上)

前言&#xff1a; 在之前我们已经简单了介绍了一下【Linux】&#xff0c;包括它的概念&#xff0c;由来啊等进行了讲解&#xff0c;接下来我们就将正式的踏入对其的学习&#xff01;&#xff01;&#xff01; 本文目录&#x1f449;操作系统的概念1.命令的语法1.1命令介绍1.2选…...

程序员必会技能—— 使用日志

目录 1、为什么要使用日志 2、自定义日志打印 2.1、在程序中得到日志对象 2.2、使用日志对象打印日志 2.3、日志格式 3、日志的级别 3.1、日志级别的分类 3.2、日志级别的设置 4、持久化日志 5、更简单的日志输出——lombok 5.1、如何在已经创建好的SpringBoot项目中添加…...

生成项目的包依赖文件requirements.txt

目录生成项目的包依赖文件requirements.txtrequirements.txt文件怎么来&#xff1f;使用pipreqs第三方库requirements.txt文件使用requirements.txt生成项目的包依赖文件requirements.txt 在安装部署代码时或者使用别人的项目时&#xff0c;会需要安装项目的依赖包&#xff0c…...

安卓渐变的背景框实现

安卓渐变的背景框实现1.背景实现方法1.利用PorterDuffXfermode进行图层的混合&#xff0c;这是最推荐的方法&#xff0c;也是最有效的。2.利用canvas裁剪实现&#xff0c;这个方法有个缺陷&#xff0c;就是圆角会出现毛边&#xff0c;也就是锯齿。3.利用layer绘制边框1.背景 万…...

【拳打蓝桥杯】算法前置课——时间复杂度与空间复杂度

文章目录前言为什么需要复杂度分析&#xff1f;大O复杂度表示法时间复杂度分析几种常见时间复杂度实例分析空间复杂度分析内容小结最后说一句&#x1f431;‍&#x1f409;作者简介&#xff1a;大家好&#xff0c;我是黑洞晓威&#xff0c;一名大二学生&#xff0c;希望和大家一…...

vite中动态引入图片,打包之后找不到图片地址?

一般来说项目中我们集中存放图片&#xff0c;然后希望在页面中直接引入&#xff01; 更好的就是直接在模板中调用一个函数 然后传入图片的名字就可以显示出来 事实上确实可以办到&#xff0c;我们用到了一个 new URL import.meta.url这俩个东西 再src目录下 static 下创建一…...

Docker 常用命令大全

目录 一、Docker &#xff08;一&#xff09;Docker基础命令 &#xff08;二&#xff09;docker镜像命令 &#xff08;三&#xff09;docker容器命令 &#xff08;四&#xff09;docker运维命令​​​​​​​ 一、Docker 容器是一种虚拟化技术&#xff0c;容器是镜像实例…...

React项目规范:目录结构、根目录别名、CSS重置、路由、redux、二次封装axios

React项目&#xff08;一&#xff09;一、创建项目二、目录结构三、craco配置别名并安装less1.craco安装2.配置别名3.安装less四、CSS样式重置五、配置路由六、配置Redux1.创建大仓库2.创建小仓库&#xff08;1&#xff09;方式1&#xff1a;RTK&#xff08;2&#xff09;方式2…...

SystemVerilog 教程第一章:简介

SystemVerilog 教程像 Verilog 和 VHDL 之类的硬件描述语言 (HDL) 主要用于描述硬件行为&#xff0c;以便将其转换为由组合门电路和时序元件组成的数字块。为了验证 HDL 中的硬件描述正确无误&#xff0c;就需要具有更多功能特性的面向对象的编程语言 (OOP) 来支持复杂的测试过…...

【Java|基础篇】逻辑控制-顺序结构、分支结构和循环结构

文章目录顺序结构分支结构if单分支语句if else双分支语句if else if else多分支语句switch语句循环语句for循环while循环do while循环continuebreak总结顺序结构 顺序结构是指代码按照从上往下的顺序依次执行 分支结构 选择语句是条件成立时,才会执行的语句.共有三种.分为是if…...

【数据挖掘实战】——家用电器用户行为分析及事件识别(BP神经网络)

项目地址&#xff1a;Datamining_project: 数据挖掘实战项目代码 目录 一、背景和挖掘目标 1、问题背景 2、原始数据 3、挖掘目标 二、分析方法与过程 1、初步分析 2、总体流程 第一步&#xff1a;数据抽取 第二步&#xff1a;探索分析 第三步&#xff1a;数据的预处…...

Kmeans聚类算法-python

import random import pandas as pd import numpy as np import matplotlib.pyplot as plt # 计算欧拉距离 def calcDis(dataSet, centroids, k): clalist[] for data in dataSet: diff np.tile(data, (k, 1)) - centroids #相减 (np.tile(a,(2,1))就是把…...

Linux|奇怪的知识|locate命令---文件管理小工具

前言: Linux的命令是非常多的&#xff0c;有一些冷门的命令&#xff0c;虽然很少用&#xff0c;但可能会有意想不到的功能&#xff0c;例如&#xff0c;本文将要介绍的locate命令。 &#xff08;平常很少会想到使用此命令&#xff0c;find命令使用的更多&#xff0c;偶然想起…...

Cadence Allegro 导出Function Pin Report报告详解

⏪《上一篇》   🏡《上级目录》   ⏩《下一篇》 目录 1,概述2,Function Pin Reportt作用3,Function Pin Report示例4,Function Pin Report导出方法4.1,方法14.2,方法2B站关注“硬小二”浏览更多演示视频 1,概述...

蓝桥杯2018年第九题-缩位求和

题目&#xff1a;在电子计算机普及以前&#xff0c;人们经常用一个粗略的方法来验算四则运算是否正确。比如&#xff1a;248 * 15 3720把乘数和被乘数分别逐位求和&#xff0c;如果是多位数再逐位求和&#xff0c;直到是1位数&#xff0c;得2 4 8 14 > 1 4 5;1 5 65…...

基于Yolv5s的口罩检测

1.Yolov5算法原理和网络结构 YOLOv5按照网络深度和网络宽度的大小&#xff0c;可以分为YO-LOv5s、YOLOv5m、YOLOv5l、YOLOv5x。本文使用YOLOv5s&#xff0c;它的网络结构最为小巧&#xff0c;同时图像推理速度最快达0.007s。YO-LOv5的网络结构主要由四部分组成&#xff0c;分别…...

Linux基本命令

Linux基本命令Linux的目录结构Linux命令入门目录切换相关命令&#xff08;cd/pwd&#xff09;相对路径、绝对路径和特殊路径符创建目录命令&#xff08;mkdir&#xff09;文件操作命令part1 (touch、cat、more)文件操作命令part2 (cp、mv、rm&#xff09;查找命令 (which、find…...

云原生场景下的安全左移

本博客地址&#xff1a;https://security.blog.csdn.net/article/details/129430859 一、安全左移概述 安全左移需要考虑开发安全、软件供应链安全、镜像仓库、配置核查这四个部分。 首先是开发安全&#xff0c;安全团队需要关注代码漏洞&#xff0c;比如使用代码检查工具进…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

DBLP数据库是什么?

DBLP&#xff08;Digital Bibliography & Library Project&#xff09;Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高&#xff0c;数据库文献更新速度很快&#xff0c;很好地反映了国际计算机科学学术研…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...

图解JavaScript原型:原型链及其分析 | JavaScript图解

​​ 忽略该图的细节&#xff08;如内存地址值没有用二进制&#xff09; 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么&#xff1a;保存在堆中一块区域&#xff0c;同时在栈中有一块区域保存其在堆中的地址&#xff08;也就是我们通常说的该变量指向谁&…...