分割链表----一道题目的3种不同的解法

1.题目概述

以这个题目的事例作为例子,我们看一下这个题目到底是什么意思(Leedcode好多小伙伴说看不懂题目是什么意思),就是比如一个x=3,经过我们的程序执行之后;大于3的在这个链表的后面,小于3的在我们的链表的前面;

2.思路一:在原链表的基础上面进行修改

(1)在原有链表的基础上面,我们判断这个节点的val数值大于或者小于x,大于x的节点往后放(尾插),小于x的节点往前放置(头插);

(2)这个过程实际上并不容易实现,虽然头插尾插并不困难,我们还要让原来的链表结点的next指针指向新的链表节点,这个过程并不容易实现,因此这个方法我们不推荐;

3.思路二:创建一个新的链表

(1)headN是一个哨兵位,用来进行数据的头插,tail用来进行数据的尾部插入;

(2)让原来的链表里面的数据和x进行比较,小于x的进行头部插入,大于x的进行尾部插入;

(3)进行头插的时候,尾指针等于哨兵位就让tail指向尾节点;

(4)这个实际上本质是和第一种方法没有什么差别的,就是我们定义了哨兵位,哨兵位的好处是新的链表一定不是空的链表,我们不需要再第一次插入结点的时候,不用考虑这种特殊情况;

4.思路三:创建两个新的链表

这种做法是官方提供的解题思路,虽然有些浪费空间,但是过程十分明确,不是非常复杂;

下面我们进行分析一下里面的思路方法:

(0)我们给大链表和小链表都设置一个哨兵位和尾部节点,方标我们插入节点;

(1)常见一个小的链表,就是小于x的节点放到这个链表里面去;同理,大于x的节点放到长链表里面去;

(2)我们要进行判断,每次插入数据的时候,大连表和小链表都要移动更新自己的尾部节点的位置,即尾部的节点每次插入一个数据就要是最新插入的数据;

(3)当我们的大连表和小链表都完成之后,我们就要让小链表的尾部节点和大链表的哨兵位的next指向的节点相联结起来;

(4)最后我们应该把大链表的尾部节点指向的区域设置为空指针,如果不设置的话,这个大链表里面的尾部节点指向的还是原来的节点,可能会和小链表里面的某个节点相连接,形成一个环形链表,这样程序会无限制的执行下去,编译器会报错说程序运行超过时间,这个报错的原因就是我们的程序内部出现了死循环;

(5)最后我们返回的时候,要从lesshead这个哨兵位的下一个节点返回,但是哨兵位是我们自己开辟的空间,最后会被释放掉,我们使用ret记住lessnode指向的下一个节点之后释放掉lessnode之后再返回ret就可以了。

总结:官方推荐的第三种方法是有原因的,看似代码比较多,实际上这个方法的思路最清楚,而且没有像前面的两种做法一样涉及很多的细节,很容易初学者理解。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【资源分享】CAD Map 3D2024安装教程

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

【深度学习】第一门课 神经网络和深度学习 Week 3 浅层神经网络

🚀Write In Front🚀 📝个人主页:令夏二十三 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:深度学习 💬总结:希望你看完之后,能对…

Java Swing手搓童年坦克大战游戏(III)

坦克大战豪华山寨版二期工程 计划:实现【道具功能】【分数统计、排行榜】【多种类型敌军坦克派遣】【自建地图】【游戏存档读档】【联网实现双人配合】等,修复一些严重的bug。由于功能比较多,目测会分多篇文章记录…… 前言 通过对原游戏的…

删除链表中等于给定值 val 的所有结点(三种方法深入解析)

又见面啦,接下来的链表相关Oj题目我会根据我自己的理解来给大家讲解,包括解析和代码,希望你可以对链表有更加深入的理解!! 题目: 先上链接: OJ题目 给你一个链表的头节点 head 和一个整数 va…

Mac 安装 JDK21 流程

一、下载JDK21 访问Oracle官方网站或选择OpenJDK作为替代品。Oracle JDK从11版本开始是商业的,可能需要支付费用。OpenJDK是一个免费开源选项。 Oracle JDK官方网站:Oracle JDK Downloads OpenJDK官方网站:OpenJDK Downloads 这里以JDK21为…

生成gitee公钥

1、打开设置 2、设置SSH公钥 3、生成公钥 4、复制终端输出的公钥,放到这里,标题随便取。 5、测试 ssh -T gitgitee.com 最后用这个测试

springboot + slf4j + log4j2

<!--Web依赖--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifact…

QT创造一个新的类(柱状图的类),并关联属性和方法

1.以在UI上添加柱状图的类为例&#xff08;Histogram&#xff09; #ifndef STUDY_HISTOGRAM_H #define STUDY_HISTOGRAM_H#include <QVector> #include <QWidget>// 前向声明 QT_BEGIN_NAMESPACE class QColor; class QRect; class QString; class QPaintDevice; …

vue3 element-plus 让el-container占满屏幕

在刚开始用element-plus的布局时&#xff0c;发现无法占满屏幕&#xff1a; 在App.vue中添加如下css代码&#xff1a; <style>html, body, #app {margin: 0;padding: 0;height: 100%;} </style>同时布局代码所在的component如下所示&#xff1a; <template&g…

亚马逊云科技AWS免费证书-EC2服务器设计(含题库)

亚马逊云AWS官方程序员专属免费证书又来了&#xff01;这次证书是关于AWS EC2实例的设计和搭建&#xff0c;EC2作为AWS服务的核心&#xff0c;是学好AWS的第一步。强推没有任何AWS背景和转码的小伙伴去学&#xff01;学完也能变成AWS开发大神&#xff01; 证书名字叫Getting St…

嵌入式开发四:STM32 基础知识入门

为方便更好的学习STM32单片机&#xff0c;本篇博客主要总结STM32的入门基础知识&#xff0c;重点在于理解寄存器以及存储器映射和寄存器映射&#xff0c;深刻体会STM32是如何组织和管理庞大的寄存器&#xff0c;从而提高开发效率的&#xff0c;为后面的基于标准库的开发做好铺垫…

【C语言实现贪吃蛇】(内含源码)

前言&#xff1a;首先在实现贪吃蛇小游戏之前&#xff0c;我们要先了解Win32 API的有关知识 1.Win32 API Windows这个多作业系统除了协调应用程序的执行、分配内存、管理资源之外&#xff0c;它同时也是一个很大的服务中心&#xff0c;调佣这个中心的各种服务&#xff08;每一…

私有开源LLM实例的三个考虑因素

原文地址&#xff1a;three-considerations-for-private-open-source-llm-instances 2024 年 4 月 29 日 在生产应用中使用商业 LLM APIs 会带来明确且经过充分研究的风险。因此&#xff0c;企业越来越多地转向利用开源的私有托管LLM实例&#xff0c;并通过RAG技术进行增强。 介…

Qt 信号槽中信号重名解决办法

1、类似与Qt4中的写法&#xff1a; 2、函数指针 3、泛型 connect(ui->combox, QOverload<int>::of(&QCombox::currentIndexChanged), this ,&mainwindow::onindexchange);

如何使用免费软件从Mac恢复音频文件?

要从Mac中删除任何文件&#xff0c;背后是有原因的。大多数Mac用户都希望增加Mac中的空间&#xff0c;这就是为什么他们更喜欢从驱动器中删除文件以便出现一些空间的原因。一些Mac用户错误地删除了该文件&#xff0c;无法识别这是一个重要文件。例如&#xff0c;他们错误地从Ma…

【 书生·浦语大模型实战营】作业(七):大模型实战评测

【 书生浦语大模型实战营】作业&#xff08;七&#xff09;&#xff1a;大模型实战评测 &#x1f389;AI学习星球推荐&#xff1a; GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学…

远程链接linux

远程连接 ssh 远程登录操作&#xff0c;ssh会对用用户进行身份信息的验证&#xff0c;会对两台主机之间发通信数据进行加密 安装 ssh 远程登录的服务端 yum install -y openssh-server启动 ssh 服务 systemctl start ssh.service 关闭 ssh 服务 systemctl stop ssh.service …

基于Flask的岗位就业可视化系统(一)

前言 本项目综合了基本数据分析的流程&#xff0c;包括数据采集&#xff08;爬虫&#xff09;、数据清洗、数据存储、数据前后端可视化等 推荐阅读顺序为&#xff1a;数据采集——>数据清洗——>数据库存储——>基于Flask的前后端交互&#xff0c;有问题的话可以留言…

数据库(MySQL) —— DDL语句

MySQL—— DDL语句 什么是MySQL的DDL语句查看所有的所有数据库查看当前使用的数据库库操作创建库使用数据库删除库 表操作创建表查询当前库中所有的表查询表结构查询指定表的建表语句删除表 表修改删除字段修改数据类型修改字段名和字段类型重命名表删除指定表并重新创建该表 我…

【C++】命名冲突了怎么办?命名空间来解决你的烦恼!!!C++不同于C的命名方式——带你认识C++的命名空间

命名空间 导读一、什么是C?二、C的发展三、命名空间3.1 C语言中的重名冲突3.2 什么是命名空间&#xff1f;3.3 命名空间的定义3.4 命名空间的使用环境3.5 ::——作用域限定符3.6 命名空间的使用方法3.6.1 通过作用域限定符来指定作用域3.6.2 通过关键字using和关键字namespace…