链表经典算法(+OJ刷题)

news2024/10/7 14:22:42

文章目录

  • 前言
  • 一、移除链表元素
  • 二、链表的中间节点
  • 三.反转链表
  • 四.合并两个有序链表
  • 五.分割链表
  • 六.环形链表的约瑟夫问题
  • 总结

创作不易,点赞收藏一下呗!!!


前言

在上一节,我们介绍了单链表的增,删,查,改接口的实现思路。今天我们就实战运用这些思想来解决一些算法题

一、移除链表元素

链接放在这里:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路一:遍历原链表,遇到满足val==val的节点就删除 

思路非常简单,但是要注意一些细节。

头节点val==val的情况需要特殊考虑,此时就是头删。还有一种特殊情况就是链表为空时直接返回head即可!!! 

思路二:创建新链表,遍历原链表并将val!=val的节点赋值给新链表

 

注意: 最后一定要判断新链表的尾节点是否指向NULL,如果不是则需要手动置为NULL!!!

思路三:哨兵节点的方式来创建带头新链表,其余思路和二相同

带头链表的好处是尾插时不需要判断新链表是否为空来分情况考虑!!! 

二.链表的中间节点

链接:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路一:先遍历原链表统计节点个数,再循环来找到中间节点

思路二:快慢指针法 

整体思路 :定义两个指针来遍历原链表,快指针一次走两步,慢指针一次走一步,当快指针为NULL或快指针的next指针为空时,此时慢指针就正好在中间节点上!!!

注意:循环条件的顺序两个不能写反,否则pfast为空时会报错!!!

三.反转链表

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路一:创建新链表,遍历原链表,进行头插

这个思路比较简单实现,不多赘述!!!

思路二:原地翻转,三指针法 

接下来:

循环进行上述操作,直至pcur为NULL时停止,这样就完成了对链表的反转。 

代码实现如下:

特别注意:一定要单独处理空链表的情况!!! 

四.合并两个有序链表

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路一:遍历l1链表,在l1链表的基础上将l2链表中的节点插入到特点位置 

这个思路实现的代码可能有些多,我们这里就不重点介绍!!!

思路二:创建新链表

思路三:创建带哨兵节点的新链表 

整体思路和第一题的思路三相仿,感兴趣的友友们可以去看看!!!

我这里就不专门写一份了。

五. 分割链表

链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

 

思路:创建两个带头链表,一个用来存放小于val的节点,另一个存放大于等于val的节点,最后将这两个节点首尾相连 

注意:最后一定要将大礼链表的尾节点的next置为NULL,否则会成环,死循环!!! 

六.环形链表的约瑟夫问题

链接:环形链表的约瑟夫问题_牛客题霸_牛客网

思路:运用循环链表

总结: 

我们不能只会做这道题,而是应该掌握这道题目背后的算法思维!!!

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

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

相关文章

Oracle12c之Sqlplus命令行窗口基本使用

Oracle12c之Sqlplus命令行窗口基本使用 文章目录 Oracle12c之Sqlplus命令行窗口基本使用1. 连接1. 超级用户2. 普通用户1. 创建普通用2. 连接 2. 修改用户连接数1. 查看默认连接最多用户数1. PL/SQL developer中查看2. Sqlplus中查看 2. 查看目前已经连接的用户数3. 修改用户连…

从零开始 TensorRT(4)命令行工具篇:trtexec 基本功能

前言 学习资料: TensorRT 源码示例 B站视频:TensorRT 教程 | 基于 8.6.1 版本 视频配套代码 cookbook 参考源码:cookbook → 07-Tool → trtexec 官方文档:trtexec 在 TensorRT 的安装目录 xxx/TensorRT-8.6.1.6/bin 下有命令行…

AtCoder Regular Contest 171(A~B)

A - No Attacking N*N棋盘上,放A个rook棋和B个pawn棋。 条件1:假设(i,j)上有一个rook,那么这 i 行和这 j 列,都不能再有其他棋子。 条件2:假设(i,j&#x…

07、全文检索 -- Solr -- Solr 全文检索 之 为索引库添加中文分词器

目录 Solr 全文检索 之 为索引库添加中文分词器添加中文分词器1、添加中文分词器的 jar 包2、修改 managed-schema 配置文件什么是 fieldType 3、添加 停用词文档4、重启 solr5、添加【*_cn】动态字段,并为该字段设置中文分词器6、演示分词器的区别演示 text_cjk 这…

红队渗透靶机:TIKI: 1

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb 目录探测 1、dirsearch 2、gobuster WEB web信息收集 searchsploit cms信息收集 ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:2…

基于tomcat的https(ssl)双向认证

一、背景介绍 某个供应商服务需要部署到海外,如果海外多个地区需要部署多个服务,最好能实现统一登录,这样可以减轻用户的使用负担(不用记录一堆密码)。由于安全问题(可能会泄露用户数据)&#x…

k8s学习-Kubernetes的包管理器Helm

1.1 为何需要Helm Kubernetes能够很好地组织和编排容器,但它缺少⼀个更高层次的应用打包工具,而Helm就是来干这件事的。 先来看个例子。 比如对于⼀个MySQL服务,Kubernetes需要部署下面这些对象: (1)Serv…

2. 从波动方程到亥姆赫兹方程

波动方程中同时包含了时间和空间分量,为进一步简化波动方程,可以假设电场分量为 (1) (注:这个假设对我而言有点突兀,但我想对于数学好的人来说就是一个常见的解题思路。可能就像高中数列题&…

【开源】JAVA+Vue+SpringBoot实现二手车交易系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 二手车档案管理模块2.3 车辆预约管理模块2.4 车辆预定管理模块2.5 车辆留言板管理模块2.6 车辆资讯管理模块 三、系统设计3.1 E-R图设计3.2 可行性分析3.2.1 技术可行性分析3.2.2 操作可行性3.2.3 经济…

用于医疗行业的大功率电阻器是什么?

设计医疗电子设备比设计其他行业应用更具挑战性。由于涉及宝贵的生命,因此各种医疗设备中使用的产品和组件必须绝对可靠且安全,毋庸置疑。即使是各种国际机构制定的合规和安全标准,在医疗保健行业也更加严格,这是正确的。 无源电气…

Re-understanding of data storytelling tools from a narrative perspective

作者:任芃锟, 王轶 & 赵凡 发表:Visual Intelligence,新刊,实行单盲同行评议制度。由施普林格以开放获取 (Open Access) 模式出版。获2022“中国科技期刊卓越行动计划高起点新刊”项目资助,目前出版不收取文章处理…

onlyfans无法订阅?2024年订阅onlyfans最新教程一键直达

讲在前面-关于OnlyFans 欧美除了脸书和推特之外,又新起了一个社交软件,它就是onlyfans,简称o站。 在极短的时间内,它就拥有了1.2亿的用户量,而全站订阅金额更是达到了17亿英镑,换成人民币,数额…

使用docker/docker-compose通过自定义的redis.conf文件启动redis 7.2.3,附上docker-compose.yml的redis配置

目录 一.复制以及使用自定义的redis.conf文件 1.在官网拷贝对应版本的配置文件内容新建redis.conf文件进行粘贴。(推荐) 2.也可以去官网下载对应版本的redis的tar.gz包,解压后在根目录下找到redis.conf文件复制也可也可。 二.配置redis.c…

机器学习复习(8)——基本概念

目录 "benchmark"和"baseline"的定义和区别 R1 score概念 LoRA微调概念 "benchmark"和"baseline"的定义和区别 在计算机视觉领域的论文中,"benchmark"和"baseline"这两个术语经常被使用&#xff0…

BootStrap学习笔记JS插件(一)--模态弹出框

一、弹出框基础 <div class"modal show"><div class"modal-dialog"><div class"modal-content"><div class"modal-header"><button type"button" class"close" data-dismiss"mo…

惠普公司也要注销了?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 惠普科技(上海)有限公司企业状态由存续变更为注销&#xff0c;这意味着惠普公司也要注销了?这是怎么回事?戴尔公司也准备注销了呢?这家美国科技巨头为什么放弃了世界最大的消费市场呢? 之前就有消息称惠普中国…

BFS——双向广搜+A—star

有时候从一个点能扩展出来的情况很多&#xff0c;这样几层之后搜索空间就很大了&#xff0c;我们采用从两端同时进行搜索的策略&#xff0c;压缩搜索空间。 190. 字串变换(190. 字串变换 - AcWing题库) 思路&#xff1a;这题因为变化规则很多&#xff0c;所以我们一层一层往外…

新开发板-正点原子的rk3568

有好长一段时间没有更新博客了&#xff0c;上次更新还是在上次...哈哈开个玩笑&#xff0c;上次stm32f407的定时器还没写完&#xff0c;就备战期末去了&#xff08;电信学院&#xff0c;你懂的&#xff09;&#xff0c;一直没更新&#xff0c;原因是我实习去了&#xff0c;在忙…

Java项目管理01-Maven基础

一、Maven的常用命令和生命周期 1.Maven的常用命令使用方式 complie&#xff1a;编译&#xff0c;将java文件编译为class字节码文件 clean&#xff1a;清理&#xff0c;删除字节码文件 test&#xff1a;测试&#xff0c;运行项目中的test类 package&#xff1a;打包&#x…

IDEA新建文件夹后右击不能创建class类排错方法

目录 1 查看自身文件名是否为关键词 2 查看是否被“蓝色文件夹”给包含了 3 检查设置那边的class模板 4 报错解决 1 查看自身文件名是否为关键词 如下使用了 Java中的关键词"class"所以才无法创建包 ---------------------------------------------------------…