链表经典面试题之一讲

news2024/11/24 17:18:54

什么是链表?

链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。

今天给大家分享一道经典的单链表面试题

力扣题目——反转链表https://leetcode.cn/problems/reverse-linked-list/

只给了头节点head,要将这个链表反转,那我们就要考虑怎么才能将这个链表反转呢?

其实我们可以改变链表的指向:

如上图,要将链表反转,我们可以把1指向2,改成2指向,依次改指向,就可以把链表倒置,我们如果将原本的结点1指向2,改成节点指向1,那就原本2指向的结点3就找不到了,所以,我们要提前保存要改变指向的节点的下一个结点防止改变指向后丢失后面的结点

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

我们定义3个结点,n1,n2,n3,让 n1=null,n2=phead,n3=phead->next;让n3保存n2的下一个结点,n2的下一个结点为n1,然后把n2赋给n1,把n3赋给n2,即

当n2为NULL的时候停下,返回n1就可以啦

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

 但是此时我们要想一下这样就结束了吗?我们考虑到n2为空的时候循环停止,那此时n3即n2->next是不是已经为NULL了呢?,所以我们要在n3=n3->next的前面判断一下,当n3为NULL时就停止,即代码为

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

 到这里同志们是不是就以为万事大吉了呢?,我们定义n3的时候定义的是n2->next,有没有一种可能这是一个空链表呢?

所以,我们要在代码开始的时候判断一下如果链表为NULL的情况

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

到这里就可以完整结束了

完整代码如下:

struct ListNode* reverseList(struct ListNode* head) {
    if(head==NULL)
    {
        return NULL;
    }
    struct ListNode* n1=NULL;
    struct ListNode* n2=head;
    struct ListNode* n3=head->next;
    while(n2)
    {
       n2->next=n1;
       n1=n2;
       n2=n3;
       if(n3)
       n3=n3->next;
    }
    return n1;
}

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

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

相关文章

Wsl2 Ubuntu在不安装Docker Desktop情况下使用Docker

目录 1. 前提条件 2.安装Distrod 3. 常见问题 3.1.docker compose 问题无法使用问题 3.1. docker-compose up报错 参考文档 1. 前提条件 win10 WSL2 Ubuntu(截止202308最新版本是20.04.xx) 有不少的博客都是建议直接安装docker desktop,这样无论在windows…

实体属性映射框架mapstruct

1. 框架介绍 mapstruct框架是一种实体类间的映射框架,能够通过JAVA注解的形式将一个实体类的属性安全的赋值给另一个实体类。通过一系列注解可以定义实体类属性之间的映射关系,mapstruct会在编译期间生成映射实现类,而非通过反射的方式进行实…

Dcoker学习笔记(一)

Dcoker学习笔记一 一、 初识Docker1.1 简介1.2 虚拟机和docker的区别1.3 Docker架构1.4 安装Docker(Linux) 二、 Dcoker基本操作2.1 镜像操作2.2 容器操作练习 2.3 数据卷volume(容器数据管理)简介数据卷语法数据卷挂载 2.4 自定义…

【Git】Git基础命令操作速记

【Git】Git基础命令操作速记 文章目录 【Git】Git基础命令操作速记1. 初始化1.1 设置用户名和邮箱1.2 初始化仓库 2. 基础命令2.1 add和commit2.2 reset2.3 查看日志2.4 删除/找回本地仓库文件2.5 找回暂存区文件2.6 diff命令(找不同) 3. 分支命令3.1 查看分支3.2 创建分支3.3 …

深度学习之基于YoloV5的火灾检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 火灾检测系统基于YoloV5的介绍 火灾检测是一项重要的安全任务,它旨在及时发现和报警火灾风险。基于深度…

postgresql|数据库|提升查询性能的物化视图解析

前言: 我们一般认为数字的世界是一个虚拟的世界,OK,但我们其实有些需求是和现实世界一模一样的,比如,数据库尤其是关系型数据库,希望在使用的数据库能够更快(查询速度),…

《008.Springboot+vue之自习室选座系统》

[火]《008.Springbootvue之自习室选座系统》 项目简介 [1]本系统涉及到的技术主要如下: 推荐环境配置:DEA jdk1.8 Maven MySQL 前后端分离; 后台:SpringBootMybatisredis; 前台:vueElementUI; [2]功能模块展示: 前端…

云端生成式 AI – 基于 Amazon EKS 的 Stable Diffusion 图像生成方案

Stable Diffusion 是当下生成式 AI 领域最受欢迎的开源多模态语言-图像模型,由于其易用的接口和良好的使用体验,受到了开源社区和广大设计行业从业者的追捧。Stable Diffusion 模型版本正在快速迭代,并带动了各行各业的生产力变革。目前市场上…

vmware16.1.2安装 windows7后 VMVMware tools 灰色 需要手动安装操作详情

问题1: 问题描述: 在Windows7镜像安装完成后,安装"VMware Tools"时出现:安装程序无法继续,需要将操作系统更新到SP1.2 重新安装后也没办法解决。 证明问题没有出在操作系统上;那么&#xff0c…

RISC Zero的Bonsai证明服务

1. 引言 Bonsai为通用ZKP网络,其支持任意链、任意协议、以及任意应用,利用ZKP来扩容、隐私和互操作。Bonsai的目标是为每条链都提供无限计算的能力。 借助Bonsai,可仅需数天的开发,即可实现对以太坊、L1链、Cosmos app链、L2 ro…

Mybatis-Plus使用Wrapper自定义SQL

文章目录 准备工作Mybatis-Plus使用Wrapper自定义SQL注意事项目录结构如下所示domain层Controller层Service层ServiceImplMapper层UserMapper.xml 结果如下所示:单表查询条件构造器单表查询,Mybatis-Plus使用Wrapper自定义SQL联表查询不用,My…

Java进击框架:Spring-数据存取(七)

Java进击框架:Spring-数据存取(七) 前言事务管理声明式事务管理 DAO支持JDBC的数据访问使用JdbcTemplate控制数据库连接JDBC批处理操作封装 SQL 语句中的参数 使用R2DBC进行数据访问对象关系映射(ORM)数据访问HibernateJPA XML模式 前言 参考…

目标检测算法 - YOLOv1

文章目录 1. 作者简介2. 目标检测综述3. YOLOv1算法3.1 预测阶段3.2 预测阶段后处理3.3 训练阶段 YOLO的全称是you only look once,指只需要浏览一次就可以识别出图中的物体的类别和位置。 YOLO是目标检测模型。目标检测是计算机视觉中比较简单的任务,用…

10-26 maven配置

打开idea 打开setting 基于Idea创建idea项目 加载jar包:(一般需要自己去手动加入,本地仓库是没有的)

【HarmonyOS】HarmonyOS备案获取公钥和指纹

【关键字】 HarmonyOS应用、鸿蒙应用、元服务、应用备案 HarmonyOS应用在华为云等平台进行应用备案时,平台需要提供用公钥和签名指纹的信息,Android可以直接通过keystore或jks签名文件进行签名信息获取,HarmonyOS签名方式与Android不同&…

LangChain之关于RetrievalQA input_variables 的定义与使用

最近在使用LangChain来做一个LLMs和KBs结合的小Demo玩玩,也就是RAG(Retrieval Augmented Generation)。 这部分的内容其实在LangChain的官网已经给出了流程图。 我这里就直接偷懒了,准备对Webui的项目进行复刻练习,那么…

Spring Cloud - 手写 Gateway 源码,实现自定义局部 FilterFactory

目录 一、FilterFactory 分析 1.1、前置知识 1.2、分析源码 1.2.1、整体分析 1.2.2、源码分析 1.3、手写源码 1.3.1、基础框架 1.3.2、实现自定义局部过滤器 1.3.3、加参数的自定义局部过滤器器 一、FilterFactory 分析 1.1、前置知识 前面的学习我们知道&#xff0c…

云服务器搭建flink集群

文章目录 1.集群配置2.修改集群配置3. 访问Web UI4. 提交作业方式5.Yarn部署模式配置5.1 会话模式部署(Session Mode)5.2 单作业模式(Per-job Mode)5.3 应用模式部署(推荐)5.3.1 上传HDFS提交(推荐) 5.4 历…

SpringCloudAlibaba——Sentinel

Sentinel也就是我们之前的Hystrix,而且比Hystrix功能更加的强大。Sentinel是分布式系统的流量防卫兵,以流量为切入点,从流量控制、流量路由、熔断降级等多个维度保护服务的稳定性。 Sentinel采用的是懒加载,这个接口被访问一次&a…

爬取Elastic Stack采集的Nginx内容

以下是一个简单的Go语言爬虫程序,用于爬取Elastic Stack采集的Nginx内容。请注意,这只是一个基本的示例,实际使用时可能需要根据具体情况进行修改和扩展。 package mainimport ("fmt""net/http""io/ioutil" )…