【初阶数据结构】单链表基础OJ题讲解
前言
📚作者简介:爱编程的小马,正在学习C/C++,Linux及MySQL。
📚本文收录与初阶数据结构系列,本专栏主要是针对时间、空间复杂度,顺序表和链表、栈和队列、二叉树以及各类排序算法,持续更新!
📚相关专栏C++及Linux正在发展,敬请期待!
目录
前言
1. 单链表基础OJ题讲解
1.1 第一题
1.2 第二题
1.3 第三题
1.4 第四题
1.5 第五题
总结
1. 单链表基础OJ题讲解
首先,经过上一篇博客的学习,相信同学们已经对顺序表的基础OJ题有了一定的了解,那么本文继续带着大家一起来刷力扣的单链表基础题。
1.1 第一题
第一题题目链接:移除链表元素
给你一个链表的头节点 head
和一个整数 val
,请你删除链表中所有满足 Node.val == val
的节点,并返回 新的头节点 。
题目分析:我画个图给大家看一下,就是如何来分析。
就是和val相同的就移除,不相同的就保留,返回新的头结点。
思路(大家最容易想到的):
拷贝,等于val我就不拷贝,不等于val的就拷贝到新链表,最后是不是返回新链表就可以,那么这个地方我用newhead和list来管理新链表。我画个图给大家看一下:
代码实现如下:
struct ListNode* removeElements(struct ListNode* head, int val)
{struct ListNode* newhead = NULL;struct ListNode* list = NULL;while(head){if(head->val == val){head = head ->next;}else{if(newhead == NULL){newhead = head;list = head;head = head->next;list->next = NULL;}else{list->next = head;head = head->next;list = list->next;list->next = NULL;}}}return newhead;
}
1.2 第二题
第二题题目链接:翻转链表
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
题目分析:
思路:
也是可以拷贝,如何拷贝呢?是不是还是建立一个新的一个链表newhead,然后尾插head链表中的节点是不是就可以了?
代码实现:
struct ListNode* reverseList(struct ListNode* head)
{struct ListNode* newhead = NULL;struct ListNode* cur = head;while(cur){if(newhead == NULL){head = head->next;newhead = cur;newhead ->next = NULL;cur = head;}else{head = head->next;cur->next = newhead;newhead = cur;cur = head;}}return newhead;
}
1.3 第三题
第三题题目链接:链表的中间节点
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
题目分析:
这道题有个很巧的方法,就是用两个指针,一个是快指针,一个是慢指针,快指针一次走两步,慢指针一次走一步,那么快指针走完是不是慢指针只走了一半,直接返回慢指针就可以了。
代码实现:
struct ListNode* middleNode(struct ListNode* head)
{struct ListNode* fast = head;struct ListNode* slow = head;while(fast && fast->next){fast = fast->next->next;slow = slow->next;}return slow;
}
1.4 第四题
第四题题目链接:返回倒数第K个节点
实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值
就是首先得先找到这个链表的尾部,然后head这个指针找到离最后一个tail指针为k的地方,返回这个地方的值,我建议大家用count这个变量来记录。
代码实现:
int kthToLast(struct ListNode* head, int k)
{int count = 0;struct ListNode* tail = head;while(tail){tail = tail->next;count++;}while(count-k){head = head->next;count--;}int m = head->val;return m;}
1.5 第五题
第五题题目链接:合并两个有序链表
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
题目分析:
这道题是这样子,还是建立一个新链表,用newhead和cur来管理,然后遍历list1和list2,谁小谁就放进去,如果有一个链表结束了 ,那就把另一个链表是不是直接拷贝过去就可以。
代码实现:
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{if(list1 == NULL)return list2;if(list2 == NULL)return list1;struct ListNode* newhead = NULL;struct ListNode* cur = NULL;while(list1 && list2){if(list1->val < list2->val){if(newhead == NULL){newhead = list1;cur = list1;list1 = list1->next;cur ->next = NULL;}else{cur -> next = list1;list1 = list1->next;cur = cur->next;}}else{if(newhead == NULL){newhead = list2;cur = list2;list2 = list2->next;cur ->next = NULL;}else{cur -> next = list2;list2 = list2->next;cur = cur->next;}} }if(list1){cur->next = list1;}if(list2){cur->next = list2;}return newhead;
}
总结
1、大家一定要动手去练习一下这些题,都是很基础的单链表的OJ题,可以把之前的增删查改再复习一下
2、 大家没有必要往后刷题,C语言能解决的问题是有限的,等后面学了C++再回来看这些题就很简单。
如果这份博客对大家有帮助,希望各位给小马一个大大的点赞鼓励一下,如果喜欢,请收藏一下,谢谢大家!!!
制作不易,如果大家有什么疑问或给小马的意见,欢迎评论区留言
相关文章:

【初阶数据结构】单链表基础OJ题讲解
前言 📚作者简介:爱编程的小马,正在学习C/C,Linux及MySQL。 📚本文收录与初阶数据结构系列,本专栏主要是针对时间、空间复杂度,顺序表和链表、栈和队列、二叉树以及各类排序算法,持…...

基于Java的俄罗斯方块游戏的设计与实现
关于俄罗斯方块项目源码.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89300281 基于Java的俄罗斯方块游戏的设计与实现 摘 要 俄罗斯方块是一款风靡全球,从一开始到现在都一直经久不衰的电脑、手机、掌上游戏机产品,是一款游戏规则简单…...

Hadoop 3.4.0+HBase2.5.8+ZooKeeper3.8.4+Hive+Sqoop 分布式高可用集群部署安装 大数据系列二
创建服务器,参考 虚拟机创建服务器 节点名字节点IP系统版本master11192.168.50.11centos 8.5slave12192.168.50.12centos 8.5slave13192.168.50.13centos 8.5 1 下载组件 Hadoop:官网地址 Hbase:官网地址 ZooKeeper:官网下载 Hive:官网下载 Sqoop:官网下载 为方便同学…...

umi搭建react项目
UMI 是一个基于 React 的可扩展企业级前端应用框架,提供路由、状态管理、构建和部署等功能,可以帮助开发者快速构建复杂的单页面应用(SPA)和多页面应用(MPA)。它与 React 的关系是,UMI 构建在 R…...

mybatis-plus之数据源切换事务失效问题
为什么存在数据源切换和食物时效问题? 由于业务数据来源不同 需要配置多个数据源来进行数据的查询 编辑等操作 这一切换业务对数据的一致性要求很高那就要保证ACID啦 也就是数据的有效性 要么是成功的 要么是失败的。 数据源切换采用mybatisplus支持 多数据源配置&a…...

vue 百度地图点击marker修改marker图片,其他marker图片不变。
解决思路,就是直接替换对应marker的图片。获取marker对象判断点击的marker替换成新图片,上一个被点击的就替换成老图片。 marker.name tag;marker.id i; //一定要设置id,我这里是设置的循环key值,要唯一性。map.addOverlay(mark…...

【Javaer学习Python】 1、Django安装
安装 Python 和 PyCharm 的方法就略过了,附一个有效激活PyCharm的链接:https://www.quanxiaoha.com/pycharm-pojie/pycharm-pojie-20241.html 1、安装Django # 安装Django pip install Django# 查看当前版本 python -m django --version 5.0.62、创建项…...

SSL协议
SSL 安全传输协议(安全套接层) 也叫TLS ---- 传输层安全协议 SSL的工作原理:SSL协议因为是基于TCP协议工作的,通信双方需要先建立TCP会话。因为SSL协议需要进行安全保证,需要协商安全参数,所以也需要建立…...
什么情况下会造成索引失效?
2.3.4. 索引失效 对索引使用左或者左右模糊匹配 使用左或者左右模糊匹配的时候,也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。但是如果前缀是确定的那么就可以使用到索引,例如 name like 许%。 因为索引 B 树是按照「索引值」有序排列…...
间隔采样视频的代码
项目统计模型准确率 项目会保存大量视频,为了统计模型的精度,我们想要十五分钟抽取一个视频用来统计。 import os import shutil from datetime import datetime, timedelta #抽取视频的代码,会在每个小时的0分、15分、30分、45分取一个命名…...

C++ QT设计模式 (第二版)
第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库,由数个较小的库或者模块组成,最为常见的如下:core、gui、xml、sql、phonon、webkit,除了core和gui,这些模块都需要在qmake的工程文件中启用 QTextStream 流,Qdat…...

【经验总结】超算互联网服务器 transformers 加载本地模型
1. 背景 使用 超算互联网 的云服务,不能连接外网,只能把模型下载到本地,再上传上去到云服务。 2. 模型下载 在 模型中 https://huggingface.co/models 找到所需的模型后 点击下载 config.json pytorch_model.bin vocab.txt 3. 上传模型文…...

ubuntu编译pcl时报错
报错如下 cc1plus: warning: -Wabi wont warn about anything [-Wabi] cc1plus: note: -Wabi warns about differences from the most up-to-date ABI, which is also used by default cc1plus: note: use e.g. -Wabi11 to warn about changes from GCC 7 在网上找到了一封邮件…...
Rust中的单元测试
概述 Rust内置了单元测试的支持,这点和Golang一样,非常的棒,我超级喜欢单元测试!!! 本节课的代码还是基于之前的求公约数的案例。 之前的完整代码如下: fn gcd(mut n: u64, mut m: u64) ->…...
ubuntu18.04系统安装pangolin
1. 安装pangolin依赖项 ctrlaltt 打开终端,依次输入下面的命令 sudo apt update sudo apt upgrade sudo apt install libglew-dev cmake libboost-dev libboost-thread-dev libboost-filesystem-dev libeigen3-dev -y 2.在终端中输入下面的命令,克隆…...
洛谷P10397题解
题目描述 给定一条 std::freopen 语句,输出其操作的文件名称。 形式化地,std::freopen 语句都应该恰好是 std::freopen("<title>","<mode>",<stream>);其中 <title> 为其操作的文件名称。其至少包含一个…...

【Linux】自动化编译工具——make/makefile(超细图例详解!!)
目录 一、前言 二、make / Makefile背景介绍 🥝Makefile是干什么的? 🍇make又是什么? 三、demo实现【见见猪跑🐖】 四、依赖关系与依赖方法 1、概念理清 2、感性理解【父与子👨】 3、深层理解【程序…...
goroutine调度策略
Golang的调度器采用M:N调度模型,其中M代表用户级别的线程(也就是goroutine),而N代表的事内核级别的线程。Go调度器的主要任务就是N个OS线程上调度M个goroutine。这种模型允许在少量的OS线程上运行大量的goroutine。 Go调度器使用了三种队列来管理gorout…...
TypeScript中`unknown`的使用场景:安全处理未知类型
TypeScript中unknown的使用场景:安全处理未知类型 引言 在TypeScript中,unknown类型是除了any类型之外的另一种选择,它用于表示一个值可能是任何类型。与any不同,unknown提供了一种更安全的方式来处理未知的数据,因为…...

react18【系列实用教程】JSX (2024最新版)
为什么要用 JSX? JSX 给 HTML 赋予了 JS 的编程能力 JSX 的本质 JSX 是 JavaScript 的语法扩展,浏览器本身不能识别,需要通过解析工具(如babel)解析之后才能在浏览器中运行。 bable 官网可以查看解析过程 JSX 的语法 …...

铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...