算法通过村第二关-链表白银笔记

news2024/11/16 13:31:24

文章目录

  • 再战链表|反转链表
    • 剑指 Offer II 024. 反转链表
    • 熟练掌握这两种解法
      • 建立头节点的解决思路
      • 不采用建立头节点的方法
      • 采用循环/递归的方式解决
  • 总结


再战链表|反转链表

提示:多拿些酒来,因为生命只有乌有。


剑指 Offer II 024. 反转链表

在这里插入图片描述

在这里插入图片描述
如果不使用链表的话,很快就能让他反转,不过也没有那么简单(用链表的话🥰)

熟练掌握这两种解法

建立头节点的解决思路

拿到题目,想一想怎么处理最好💡
那我们就先画个图吧💕
在这里插入图片描述
再来个过程图,这让就看的懂了:

在这里插入图片描述

  1. 建立一个头节点指向 1
  2. cur 直线待处理的头节点
  3. next 直线cur 的下一个节点

我们尝试写一下代码👌
重点理解一下 图
在这里插入图片描述

/**
 * 方法1:虚拟结点 ,并复用已有的结点
 *
 * @param head
 * @return
 */
public static ListNode reverseListByDummyNotCreate(ListNode head) {
    if(head == null){
        return null;
    }
    ListNode ans = new ListNode(-1);
    ListNode cur = head;
    while(cur != null){
        ListNode next = cur.next; // 所以这里 需要保留一下cur后面的节点
        // ans.next = cur.next;
        // ans.next = cur;   不能这样写
        cur.next = ans.next;  // 改变当前节点的指针域 也就是说 现在cur后面的已经断了
        // 现在可以说 有两个指针指向 ans 的下一个节点
        ans.next = cur; // 更改指针域  下一个 ans 就不指向头节点了
        cur = next;  // 修改cur当前节点  进行下一次循环
    }
    return ans.next;
}

这个是经典的解决方法,很常用,一定要数量掌握。

不采用建立头节点的方法

因为上面的方法更容易想到,一般面试官也不建议使用头节点😒,不使用头节点更体现你对链表的熟悉程度。
那我们就来挑战一下😁:
我们梳理一下思路:
先画个图hahah😁
在这里插入图片描述
注意:链表的结构
我们来看一下执行期间的流程图:

  1. 开始prev指向null cur 指向头节点 next 指向下一个节点
  2. 这样从cur 开始把链表切成两段 修改cur后面的指针域
  3. cur.next = pre; pre = cur; cur = next; 完成替换

在这里插入图片描述
注意:上面👆的代码太重要了,建议理解的基础上,刻在骨子里,以后用的地方很多。

采用循环/递归的方式解决

这个放到后面解决,目前先不讨论。


总结

这里最主要的是掌握链表反转,【不带头节点的】⭐

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

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

相关文章

9个可用于图片转文本的最佳免费 OCR 软件

光学字符识别 (OCR) 软件可帮助将不可编辑的文档格式(例如 PDF、图像或纸质文档)转换为可编辑和可搜索的机器可读格式。 OCR 应用程序通常用于从 PDF 和图像中捕获文本,并将文本转换为可编辑格式,例如 Word、Excel 或纯文本文件。…

SpringBoot复习:(3)应用打包成jar包,清单文件里的主类是我们用@SpringBootApplication注解标记的类吗?

不是. MANIFEST.MF类似如下: Manifest-Version: 1.0 Spring-Boot-Classpath-Index: BOOT-INF/classpath.idx Spring-Boot-Layers-Index: BOOT-INF/layers.idx Start-Class: com.example.demo.DemoApplication Spring-Boot-Classes: BOOT-INF/classes/ Spring-Boot-…

DevOps-GitHub/GitLab

DevOps-GitHub/GitLab GitHub是一个开源代码托管平台。基于web的Git仓库,提供共有仓库和私有仓库(私有仓库收费)。 GitLab可以创建免费私有仓库。 GitHub 为了快速操作,这里对创建仓库以及注册不做说明。 首先再GitHub上创建一…

不用手动编程!ChatGPT帮你轻松实现单片机按键输入功能

从今年年初,OpenAI发布的ChatGPT已摧古拉朽之势席卷全球,短短两个月注册用户数就超过1亿人,是全世界增长速度最快的应用。很多人都说今年是AI元年,其实也是有一定道理的,之前的AI门槛相对较高,很多人没有机…

python使用CGI编程,网页写个标题

需要有个 Linux虚拟机,安装 apache, 本次使用 deepin v23,参考: sudo apt install apache2 #安装 apache2 systemctl start apache2 # 启动 apache2 sudo a2enmod cgi # 启用CGI模块 sudo mkdir /usr/lib/cgi-bin #创…

APT32组织针对我国关基单位攻击活动分析

事件背景 2022年5月,绿盟科技伏影实验室与运营能力中心梅花K战队共同于国家某关基单位发现异常外联IP,通过攻击活动中捕获的攻击流量分析,确认此次攻击活动是由境外APT组织APT32所发起。 绿盟科技伏影实验室与运营能力中心梅花K战队利用主机…

2 种方式查找极狐GitLab 容器镜像 Tag,几分钟快速构建私有化部署实例

目录 通过 Helm 命令查找 第1步:添加 Helm Chart 第2步:更新 Helm Chart 第3步:Helm search 查找过往 tag 通过 Omnibus package 来查 极狐GitLab 是一个一体化 DevOps 平台,其灵活的私有化部署方式(源代码安装、…

通识测试09缺陷和缺陷报告

缺陷和缺陷报告 缺陷的基本概述 缺陷的定义 缺陷的属性 正向的测试用例缺陷远高于反向的。 缺陷的类型 缺陷的生命周期 缺陷的识别 缺陷报告 缺陷报告 缺陷报告编写目的 需求、用例、bug的关系

Android触摸事件分发机制(一)

1. 简介 本文主要分享事件分发中的基本概念。 介绍负责参与分发事件的主要方法。 从这些方法的核心逻辑中,总结事件分发的规律。 2. 被分发的对象 被分发的对象是那些?被分发的对象是用户触摸屏幕而产生的点击事件,事件主要包括&#xff1…

人脸检测实战-insightface

目录 简介 一、InsightFace介绍 二、安装 三、快速体验 四、代码实战 1、人脸检测 2、人脸识别 五、代码及示例图片链接 简介 目前github有非常多的人脸识别开源项目,下面列出几个常用的开源项目: 1、deepface 2、CompreFace 3、face_recogn…

Moonbeam生态支持有哪些?

Moonbeam作为波卡生态中最活跃的底层公链之一,自上线以来就致力于构建生态,并通过XCM和GMP等技术实现了多链部署的愿景。通过举办针对不同主题的黑客松、建立生态增长基金、设计项目孵化计划和提供开发奖励等方式,Moonbeam持续推动链上生态的…

基于规则指导的知识图谱推理协作代理学习(2019)7.27

基于规则指导的知识图谱推理协作代理学习 摘要介绍问题和准备工作问题公式基于符号的方法基于游走的方法 RuleGuider模型架构实体代理策略网络 模型学习奖励设计训练过程 实验实验设置数据集实验结果消融研究人工评估 总结 摘要 基于 行走模型 是通过在提供可解释决策的同时实…

【C++】-多态的经典题目

💖作者:小树苗渴望变成参天大树🎈 🎉作者宣言:认真写好每一篇博客💤 🎊作者gitee:gitee✨ 💞作者专栏:C语言,数据结构初阶,Linux,C 动态规划算法🎄 如 果 你 …

解密C++多态机制:发挥对象的多样性,实现更加智能的程序设计

目录 一.多态1.多态的用处2.多态的实现3.虚函数4.override 和 final5.重载重写与重定义6.虚函数表 一.多态 1.多态的用处 众所周知C语言的三大特性:封装、多态、继承。其中多态就是去完成某个行为,但是会根据不同的对象产生不同的状态,所以…

Windows SMB 共享文件夹 排错指南

1 排错可能 是否系统名称为全英文格式 如果不是则 重命名 根据如下排错可能依次设置 1,在运行里面输入"secpol.msc"来启动本地安全设置,\ 然后选择本地策略–>安全选项 -->网络安全LAN 管理器身份验证级别,\ “安全设置”…

操作系统知识点总结

操作系统知识点总结: 第一章:操作系统概述 1.1操作系统的概念: ​ 操作系统是一种系统软件,与其他系统软件和应用软件不同,它有自己的基本特征。它的四大基本特征也就是并发,共享,虚拟,异步。 1.2操作系统的特征(四大…

前端开发信息套路:信息是如何传值

文章目录 前言信息组件化的难点:组件信息流通信息流通信息流通分类通知直接调用回调函数发布订阅全局缓存使用建议 总结 前言 作为一个写了好几个月的Uniapp小程序的打工狗,我总结了一下在前端中信息是如何传递的,得出了一个比较标准化的信息…

thinkphp6 验证码验证结果失败,可能是session开启位置错了!!!

搞了一下下午&#xff0c;始终提示验证码不正确 然后百度得到的结果都是&#xff1a;开启session&#xff0c;但是我开启了就是管用 <?php // 全局中间件定义文件 return [// 全局请求缓存// \think\middleware\CheckRequestCache::class,// 多语言加载// \think\middle…

【人人都看懂的漫画算法】边打扑克边学插入排序算法,彻底搞懂时间复杂度

博主&#xff1a;爱码叔 个人博客站点&#xff1a; icodebook.com 公众号&#xff1a;漫话软件设计 微博&#xff1a;程序员涛哥 专注于软件设计与架构、技术管理。擅长用通俗易懂的语言讲解技术。对技术管理工作有自己的一定见解。文章会第一时间首发在个站上&#xff0c;欢迎…

如何评判算法好坏?复杂度深度解析

如何评判算法好坏&#xff1f;复杂度深度解析 1. 算法效率1.1 如何衡量一个算法好坏1.2 算法的复杂度 2 时间复杂度2.1 时间复杂度的概念2.1.1 实例 2.2 大O的渐进表示法2.3 常见时间复杂度计算举例 3 空间复杂度4 常见复杂度对比5 结尾 1. 算法效率 1.1 如何衡量一个算法好坏 …