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

【初阶数据结构】单链表基础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题讲解

前言 &#x1f4da;作者简介&#xff1a;爱编程的小马&#xff0c;正在学习C/C&#xff0c;Linux及MySQL。 &#x1f4da;本文收录与初阶数据结构系列&#xff0c;本专栏主要是针对时间、空间复杂度&#xff0c;顺序表和链表、栈和队列、二叉树以及各类排序算法&#xff0c;持…...

基于Java的俄罗斯方块游戏的设计与实现

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

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 的可扩展企业级前端应用框架&#xff0c;提供路由、状态管理、构建和部署等功能&#xff0c;可以帮助开发者快速构建复杂的单页面应用&#xff08;SPA&#xff09;和多页面应用&#xff08;MPA&#xff09;。它与 React 的关系是&#xff0c;UMI 构建在 R…...

mybatis-plus之数据源切换事务失效问题

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

vue 百度地图点击marker修改marker图片,其他marker图片不变。

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

【Javaer学习Python】 1、Django安装

安装 Python 和 PyCharm 的方法就略过了&#xff0c;附一个有效激活PyCharm的链接&#xff1a;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 安全传输协议&#xff08;安全套接层&#xff09; 也叫TLS ---- 传输层安全协议 SSL的工作原理&#xff1a;SSL协议因为是基于TCP协议工作的&#xff0c;通信双方需要先建立TCP会话。因为SSL协议需要进行安全保证&#xff0c;需要协商安全参数&#xff0c;所以也需要建立…...

什么情况下会造成索引失效?

2.3.4. 索引失效 对索引使用左或者左右模糊匹配 使用左或者左右模糊匹配的时候&#xff0c;也就是 like %xx 或者 like %xx% 这两种方式都会造成索引失效。但是如果前缀是确定的那么就可以使用到索引&#xff0c;例如 name like 许%。 因为索引 B 树是按照「索引值」有序排列…...

间隔采样视频的代码

项目统计模型准确率 项目会保存大量视频&#xff0c;为了统计模型的精度&#xff0c;我们想要十五分钟抽取一个视频用来统计。 import os import shutil from datetime import datetime, timedelta #抽取视频的代码&#xff0c;会在每个小时的0分、15分、30分、45分取一个命名…...

C++ QT设计模式 (第二版)

第3章 Qt简介 3.2 Qt核心模块 Qt是一个大库&#xff0c;由数个较小的库或者模块组成&#xff0c;最为常见的如下&#xff1a;core、gui、xml、sql、phonon、webkit&#xff0c;除了core和gui&#xff0c;这些模块都需要在qmake的工程文件中启用 QTextStream 流&#xff0c;Qdat…...

【经验总结】超算互联网服务器 transformers 加载本地模型

1. 背景 使用 超算互联网 的云服务&#xff0c;不能连接外网&#xff0c;只能把模型下载到本地&#xff0c;再上传上去到云服务。 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内置了单元测试的支持&#xff0c;这点和Golang一样&#xff0c;非常的棒&#xff0c;我超级喜欢单元测试&#xff01;&#xff01;&#xff01; 本节课的代码还是基于之前的求公约数的案例。 之前的完整代码如下&#xff1a; fn gcd(mut n: u64, mut m: u64) ->…...

ubuntu18.04系统安装pangolin

1. 安装pangolin依赖项 ctrlaltt 打开终端&#xff0c;依次输入下面的命令 sudo apt update sudo apt upgrade sudo apt install libglew-dev cmake libboost-dev libboost-thread-dev libboost-filesystem-dev libeigen3-dev -y 2.在终端中输入下面的命令&#xff0c;克隆…...

洛谷P10397题解

题目描述 给定一条 std::freopen 语句&#xff0c;输出其操作的文件名称。 形式化地&#xff0c;std::freopen 语句都应该恰好是 std::freopen("<title>","<mode>",<stream>);其中 <title> 为其操作的文件名称。其至少包含一个…...

【Linux】自动化编译工具——make/makefile(超细图例详解!!)

目录 一、前言 二、make / Makefile背景介绍 &#x1f95d;Makefile是干什么的&#xff1f; &#x1f347;make又是什么&#xff1f; 三、demo实现【见见猪跑&#x1f416;】 四、依赖关系与依赖方法 1、概念理清 2、感性理解【父与子&#x1f468;】 3、深层理解【程序…...

goroutine调度策略

Golang的调度器采用M:N调度模型&#xff0c;其中M代表用户级别的线程(也就是goroutine)&#xff0c;而N代表的事内核级别的线程。Go调度器的主要任务就是N个OS线程上调度M个goroutine。这种模型允许在少量的OS线程上运行大量的goroutine。 Go调度器使用了三种队列来管理gorout…...

TypeScript中`unknown`的使用场景:安全处理未知类型

TypeScript中unknown的使用场景&#xff1a;安全处理未知类型 引言 在TypeScript中&#xff0c;unknown类型是除了any类型之外的另一种选择&#xff0c;它用于表示一个值可能是任何类型。与any不同&#xff0c;unknown提供了一种更安全的方式来处理未知的数据&#xff0c;因为…...

react18【系列实用教程】JSX (2024最新版)

为什么要用 JSX&#xff1f; JSX 给 HTML 赋予了 JS 的编程能力 JSX 的本质 JSX 是 JavaScript 的语法扩展&#xff0c;浏览器本身不能识别&#xff0c;需要通过解析工具&#xff08;如babel&#xff09;解析之后才能在浏览器中运行。 bable 官网可以查看解析过程 JSX 的语法 …...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

MMaDA: Multimodal Large Diffusion Language Models

CODE &#xff1a; https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA&#xff0c;它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构&#xf…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...