力扣(LeetCode)数据结构练习题(2)

news2025/1/20 1:35:55

今天又写了两道关于链表的练习题,来给大家分享一下。巩固一下上一篇学到的链表知识,题目可以然我们更清楚的认识链表。


目录

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。


给你单链表的头节点 head ,请你反转链表,并返回反转后的链表

 

现在我们来审题,题目很明了让我们反转一个单向链表,那么这里我们就可以简单思考一下思路了,有了思路我们就可以开始尝试一下写代码了。下面是我的方法:

方法一:

我们这里是将节点里的指针进行反转即可完成链表的反转。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {

if(head==NULL)
{
    return NULL;
}

struct ListNode* n1=NULL;
struct ListNode* n2=head;
struct ListNode* n3=n2->next;

while(n2)
{
n3=n2->next;
n2->next=n1;
n1=n2;
n2=n3;

}
return n1;




    
}

需要注意的是我们要考虑一下当head为空的情况下我们就直接返回NULL,就可以了。当不为空我们就可以直接取三个辅助变量进行 反转,我们只要将后一个的指针指向前一个即代码中

n2->next=n1;  然后我们就可以将代码往后遍历,这时n3的作用就是提前记住原来n2的next,然后令n2=n3,n1=n2,即可完成往后遍历。这是第一种方法,下面是第二种方法。

 

 


第二种方法:

我们可以通过创建一个新的反向链表即可。通过不断将原链表的字节一个一个头插也可以完成链表的反转。 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* reverseList(struct ListNode* head) {
    
    if(head==NULL)
    {
        return NULL;
    }
struct ListNode* n=head;
struct ListNode* newhead=NULL;
struct ListNode* next=NULL;


do
{
 next=n->next;


n->next=newhead;
 newhead=n;
 n=next;
}while(n);


return newhead;




}

 

 


 

给你单链表的头结点 head ,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。

这里的题目也是很明了的,让我们返回一个中间节点就行了 ,那么我们要解决的就是如何找到中间节点,很多人想的办法是遍历一遍求出长度,然后又遍历到中间节点返回,但是这样就会增加时间复杂度了。所以我们可以用快慢指针来实现。块指针一次遍历两个节点,慢指针一次遍历一个节点。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* middleNode(struct ListNode* head) {
    
struct ListNode* fast=head;
struct ListNode* slow=head;
while(fast&&fast->next)
{

slow=slow->next;

fast=fast->next->next;



}
return slow;




}

如上fast为块指针,slow为慢指针。注意的是当fast和fast->next为空时都要结束循环,不能只是写fast为空时才结束循环,否则代码会出错。


好了今天文章就到这里结束了。

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

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

相关文章

论文阅读-基于动态权重的一致性哈希微服务负载均衡优化

论文名称:基于动态权重的一致性哈希微服务负载均衡优化 摘要 随着互联网技术的发展,互联网服务器集群的负载能力正面临前所未有的挑战。在这样的背景下,实现合理的负载均衡策略变得尤为重要。为了达到最佳的效率,可以利用一致性…

从理论到实践:车间精益生产培训的全面应用指南

精益生产培训在车间的应用通常会通过以下几个步骤进行实践: 理论培训:首先,需要对车间的员工进行精益生产的基本理论培训,让他们理解精益生产的核心理念,比如价值流、流程优化、减少浪费、持续改进等。 现场诊断&am…

刚开工,就用Python兼职赚了5w!

前言 今天是节后上班第一天,祝大家开工大吉! 先说个好消息:每年春节后,会迎来Python圈内兼职接单的小高潮。近期可以很轻松地,接到爬虫类和数据分析类的私活,需求大报酬高。 往年春节开工后的几天&#…

Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程

点击下载《Spring Boot与LiteFlow:轻量级流程引擎的集成与应用含完整过程》 1. 前言 本文旨在介绍Spring Boot与LiteFlow的集成方法,详细阐述LiteFlow的原理、使用流程、步骤以及代码注释。通过本文,读者将能够了解LiteFlow的特点&#xff…

鸿蒙原生应用元服务实战-Serverless华为账户认证登录需尽快适配

一、ArkTS\API9,服务器端基于serverless开发的应用与元服务华为账号注册登录功能暂时是不支持的 二、3月1日后的审核要求 3月1日的时间是快到了。 三、会导致的结果 使用了ArkTS\API9,服务器端基于serverless开发的应用与元服务,如果要…

devc++跑酷小游戏底层讲解

以3.0.0为例 采集按键: 我们需要一个函数来采集用户按下的按键以便我们执行相应的代码,不能有回显(输入的字符会显示在控制台程序上),不用回车也可以读取到 cin,scanf: 输入的类型为char&am…

ETL数据集成工具DataX、Kettle、ETLCloud特点对比

ETL数据集成工具 对于数据仓库,大数据集成类应用,通常会采用ETL工具辅助完成。ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract) 、交互转换(transform) 、加载(load)至的端的过程当前的很多应…

算法练习-每日气温【单调栈】(思路+流程图+代码)

难度参考 难度:困难 分类:单调栈 难度与分类由我所参与的培训课程提供,但需 要注意的是,难度与分类仅供参考。且所在课程未提供测试平台,故实现代码主要为自行测试的那种,以下内容均为个人笔记,…

npm run dev运行出现NODE_OPTIONS=--max_old_space_size=4096 vite --mode dev --host?

问题描述 PS E:\AWorkDataease\DataEase\core\core-frontend> npm run dev dataease0.0.0 dev NODE_OPTIONS–max_old_space_size4096 vite --mode dev --host 0.0.0.0 ‘NODE_OPTIONS’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 解决方案 遇到…

【8】知识加工

一、概述 对信息抽取/知识融合后得到的“事实”进行知识推理以拓展现有知识、得到新知识。 知识加工主要包括三方面内容:本体构建、知识推理和质量评估。 二、本体构建 1.本体 定义:本体是用于描述一个领域的术语集合,其组织结构是层次结…

Python数据科学:线性回归

4.5线性回归 线性回归是解决回归问题的常用模型。 实例:简单线性回归 def skLearn13():线性回归:return:#简单的一元一次方程#斜率为a,截距为b#yaxb#创建线性数据rng np.random.RandomState(0)x 10 * rng.rand(50)y 2*x - 5 rng.randn(50)#绘制数据集plt.sca…

osqp-eigen学习

OSQP文档学习 参考博客: (1)二次规划(QP)与OSQP求解器 (2)如何使用OSQP-Eigen osqp-eigen 1 osqp-eigen接口 以下列问题的求解为例: s.t. 1 ≤ x 1 ≤ 1.5 1≤x_1≤1.5 1≤x1​≤…

【C#】使用代码实现龙年春晚扑克牌魔术(守岁共此时),代码实现篇

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。…

Linux-目录I/O-004

学习重点: 1.目录I/O的函数接口 2.目录的遍历,目录的递归遍历 1.【mkdir】 1.1函数原型 【int mkdir(const char *pathname, mode_t mode);】1.2函数功能 创建目录文件1.3函数参数 1.3.1【pathname】 文件路径1.3.2【mode】 文件的权限1.4返回值 …

区块链 之 默克尔树

默克尔树简介 欢迎阅读 BTC网络 之 区块裁剪 什么是默克尔树? 默克尔树(Merkle Tree)是一种树状数据结构,被广泛用于比特币等区块链系统中,用于高效地组织和验证数据的完整性。这个树状结构由唯一的根哈希值标识&am…

matplotlib图例使用案例1.1:在不同行或列的图例上添加title

我们将图例进行行显示或者列显示后,只能想继续赋予不同行或者列不同的title来进行分类。比较简单的方式,就是通过ax.annotate方法添加标签,这样方法复用率比较低,每次使用都要微调ax.annotate的显示位置。比较方便的方法是在案例1…

PyTorch使用Tricks:Dropout,R-Dropout和Multi-Sample Dropout等 !!

文章目录 1、为什么使用Dropout? 2、Dropout的拓展1:R-Dropout 3、Dropout的拓展2:Multi-Sample Dropout 4、Dropout的拓展3:DropConnect 5、Dropout的拓展4:Standout 6、Dropout的拓展5:Gaussian Dropout …

微信小程序开发:通过wx.login()获取用户唯一标识openid和unionid

下面代码展示了 openid 的获取过程。 想获取 unionid 需要满足条件:小程序已绑定到微信开放平台账号下,不然只会返回 openid。 【相关文档】 微信小程序开发:appid 和 secret 的获取方法 wx.login({success (res) {if (res.code) {// 发起网…

十二:枚举与注解

文章目录 01、枚举类的使用1.1、枚举类的理解1.2、自定义枚举类1.3、使用enum关键字定义枚举类1.4、Enum类中的常用方法1.5、使用enum关键字定义的枚举类实现接口 02、注解的使用2.1、注解的理解2.3、如何自定义注解2.4、jdk中4个基本的元注解的使用12.5、jdk中4个基本的元注解…

解锁创意灵感,探索FlutterExampleApps项目的奥秘

解锁创意灵感,探索FlutterExampleApps项目的奥秘 项目简介 FlutterExampleApps项目是一个包含各种示例应用链接的仓库,旨在演示Flutter应用开发中的各种功能、特性和集成。 项目包含了以下几个部分,每个部分都涵盖了不同的内容和主题&…