代码随想录算法训练营Day4 | 24.两两交换链表中的节点、19.删除链表的倒数第 N 个节点、面试题. 链表相交、142.环形链表II

LeetCode 24 两两交换链表中的节点

在这里插入图片描述

本题要注意的条件:

  1. 遍历终止条件
  2. 改变引用指向的时候,需要保存一些节点记录

为了更好的操作链表,我定义了一个虚拟的头节点 dummyHead 指向链表。如下图所示在这里插入图片描述

  • 既然要交换链表中的节点,那么肯定需要有遍历的指针 cur,还有保存节点 前驱或者后继的节点 tmp。下面通过以下几个图来讲述代码的一个整体思路在这里插入图片描述在这里插入图片描述
  • 后续就是重复以上步骤,那么还有没解决的问题就是,这个循环的终止条件是什么?我们继续来分析一下在这里插入图片描述
    所以终止条件 while(cur.next != null && cur.next.next != null)

注意点:

  1. 不能写成 while(cur.next.next && null cur.next != null ) 如果是偶数个节点的话,此时就会出现空指针异常的情况。
  2. 也不能写成 while(cur.next != null || cur.next.next != null),也会出现空指针异常,当 节点为偶数个时候,那么 cur.next = null ,不满足就判断第二个条件,此时 cur.next.next就会出现空指针异常,因为 cur.next = null

LeetCode 19 删除链表的倒数第N个节点

在这里插入图片描述
本题思路:

  • 要删除倒数第 N 个节点的话,我们要找到倒数第 N 个节点的前驱节点,也就是我们要知道正数是第几个。下面用一个图来描述下思路在这里插入图片描述
  • 所以第一步就是定义一个计数器,遍历链表,得到节点总个数 size,然后得出 index = size - n。然后定义个 tmp 指针往后遍历 index 次,指向 index 下标节点,然后改变指针指向即可。在这里插入图片描述
  • 最后返回 dummyHead.next
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        // 使用一个虚拟头节点好操作一点
        ListNode dummyHead = new ListNode(0);
        dummyHead.next = head;
        ListNode tmp = dummyHead;
        ListNode cur = head;
        int size = 0;
        while(cur != null){
            size++;
            cur = cur.next;
        }
        int index = size - n;
        while(index-- != 0){
            tmp = tmp.next;
        }
        tmp.next = tmp.next.next;
        return dummyHead.next;
    }  
}

LeetCode 面试题 0207 链表相交

在这里插入图片描述

本题注意点: 值相同,但不一定节点是同一个

本题思路:

  1. 首先我们需要往后遍历,但是两个链表长度不一样,所以要让两个链表长度一样,就要先遍历两个链表,得到 A 和 B 链表的长度,然后长度大的遍历两个链表长度差值,让两个链表的长度相等。
  2. 只有这样我们往后遍历的时候,才能对比链表的值是否相等,节点是否同一个。否则直接开始遍历,永远也匹配不到
    在这里插入图片描述
public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        // 首先遍历两个链表,算出长度
        int sizeA = 0;
        int sizeB = 0;
        ListNode A = headA;
        ListNode B = headB;
        while(A != null){
            sizeA++;
            A = A.next;
        }
        while(B != null){
            sizeB++;
            B = B.next;
        }
        int res = Math.abs(sizeA-sizeB);
        if( sizeA > sizeB){
            while(res-- != 0){
                headA = headA.next;
            }
        }else{
            while(res-- != 0){
                headB = headB.next;
            }
        }

        // 此时 两个链表长度相等,就可以开始同时遍历
        while(headA != null){
            if(headA.val == headB.val && headA == headB){
                return headA;
            }
            headA = headA.next;
            headB = headB.next;
        }
        return headA;
    }
}

LeetCode 142 环形链表||

在这里插入图片描述

本题思路:使用快慢指针来解决这道题,下面来详细介绍下这个思想

在这里插入图片描述
看完上图,大家可能有以下几个疑问?

  • slow 为什么不可以是 slow = x + n (y + z),下面用一个图来描述在这里插入图片描述
  • 为什么 x = n (y + z) - y,n 一定是大于等于1 ,如果为 0 的话,这是不可能出现的情况,看下图:在这里插入图片描述
public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode slow = head;
        ListNode fast = head;
        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
            // 如果两个相遇了说明有环
            if(slow == fast){
                ListNode meet = fast;
                ListNode start =  head;
                while( meet != start){
                    meet = meet.next;
                    start = start.next;
                }
                return meet;
            }
        }
        return null;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在线学习平台,云课堂云教育类网站源码,在线题库+随身携带的刷题神器+视频安装教程

源码介绍 在线题库:由传统的线下学习模式改为在线学习。能够实现学员在线学习、练习、考试 优点:方便、便宜、自我管理、选择性更多 、成人教育 (1)公考:国考、省考、事业单位… (2)升学&…

9. DashBoard

9. DashBoard 文章目录 9. DashBoard9.1 部署Dashboard9.2 使用DashBoard 在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。 为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard)。 用户可以使用…

在Windows上通过VS2019自带的Cmake来编译OpenCV-4.5.3源码

文章目录 用VS打开OpenCV源码cmake的配置及生成操作生成及安装 用VS打开OpenCV源码 方式一:文件–》打开–》Cmake 找到源码根目录下CMakeLists.txt文件 导入即可。 方式二:在开始使用这里 选择 打开本地文件夹 找到源码的根目录,导入即可…

「斗罗二」七怪大赛1击穿12,蝶神斩打爆人面魔蛛,二代七怪诞生

Hello,小伙伴们,我是拾荒君。 《斗罗大陆Ⅱ绝世唐门》第27集的更新,为我们带来了激烈的二代七怪竞选大赛的精彩瞬间。在这一集中,新一代史莱克七怪的表现尤为出色,他们面对的挑战也愈发艰难。 比赛进行得如火如荼,贝贝…

[ 云计算 | Azure 实践 ] 在 Azure 门户中创建 VM 虚拟机并进行验证

文章目录 一、前言二、在 Azure Portal 中创建 VM三、验证已创建的虚拟机资源3.1 方法一:在虚拟机服务中查看验证3.1 方法二:在资源组服务中查看验证 四、文末总结 一、前言 本文会开始创建新系列的专栏,专门更新 Azure 云实践相关的文章。 …

linux日志管理_日志轮转logrotate

10.2 日志轮转logrotate 10.2.1 简介 日志:记录了程序运行时各种信息。通过日志可以分析用户行为,记录运行轨迹,查找程序问题。 ​ 但由于磁盘的空间是有限的,日志轮转就像飞机里的黑匣子,记录的信息再重要也只能记录…

flume系列之:监控flume agent channel的填充百分比

flume系列之:监控flume agent channel的填充百分比 一、监控效果二、获取flume agent三、飞书告警四、获取每个flume agent channel的填充百分比一、监控效果 二、获取flume agent def getKafkaFlumeAgent():# 腾讯云10.130.112.60zk = KazooClient(hosts

【案例】--“特别抢购”案例

目录 一、案例背景二、技术方案思路三、技术方案具体设计3.1、表设计3.2、Java代码实现一、案例背景 A公司向供应商B公司买了一套软件产品。B公司的这套产品有多个应用系统服务【如appId1、appId2、appId3】,每个应用都有各自的业务应用场景,但都需要管理文档,那么就需要磁…

Linux驱动(中断、异步通知):红外对射,并在Qt StatusBus使用指示灯进行显示

本文工作: 1、Linux驱动与应用程序编写:使用了设备树、中断、异步通知知识点,实现了红外对射状态的异步信息提醒。 2、QT程序编写:自定义了一个“文本指示灯”类,并放置在QMainWidget的StatusBus中。 3、C与C混合编程与…

C++:函数重载

1.函数重载概念 函数重载就是用同一个函数名定义的不同函数,当函数名和不同的参数搭配时函数的功能和含义不同。 2.实现函数重载的条件 同一个作用域,参数个数不同或者参数类型不同或者参数顺序不同(满足一个即可) void func(){} void func(int x){} v…

55 代码审计-JAVA项目注入上传搜索或插件挖掘

目录 必备知识点演示案例:简易Demo段SQL注入及预编译IDEA审计插件FindBugs安装使用Fortify_SCA代码自动审计神器使用Ofcms后台SQL注入-全局搜索关键字Ofcms后台任意文件上传-功能点测试 涉及资源: 我们一般针对java项目,进行漏洞分析的话,主要…

SolidWorks二次开发 C#-读取基于Excel的BOM表信息

SolidWorks二次开发 C#-读取基于Excel的BOM表信息 问题点来源解决方案及思路相关引用链接 问题点来源 这是一位粉丝问的一个问题,他说到: 老师,请问Solidworks二次开发工程图中"基于Excel的材料明细表"怎么读取里面的数据? Ps:这…

风速预测(五)基于Pytorch的EMD-CNN-LSTM模型

目录 前言 1 风速数据EMD分解与可视化 1.1 导入数据 1.2 EMD分解 2 数据集制作与预处理 2.1 先划分数据集,按照8:2划分训练集和测试集 2.2 设置滑动窗口大小为96,制作数据集 3 基于Pytorch的EMD-CNN-LSTM模型预测 3.1 数据加载&…

「Verilog学习笔记」流水线乘法器

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule multi_pipe#(parameter size 4 )(input clk , input rst_n ,input [size-1:0] mul_a ,input [size-1:0] mul_b ,output …

DHCP—动态主机配置协议

动态主机配置协议DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是RFC 1541(已被RFC 2131取代)定义的标准协议,该协议允许服务器向客户端动态分配IP地址和配置信息。 DHCP协议支持C/S&#x…

【数据分享】2019-2023年我国地级市逐月新房房价数据(Excel/Shp格式)

房价是一个城市发展程度的重要体现,一个城市的房价越高通常代表这个城市越发达,对于人口的吸引力越大!因此,房价数据是我们在各项城市研究中都非常常用的数据!之前我们分享过2015-2023年我国区县逐月新房房价数据&…

倚力未来:人工智能智能辅助医疗的前景与挑战

导言 人工智能在医疗领域的应用正迅速发展,为医疗行业带来了新的可能性。本文将深入探讨人工智能在医疗中的智能辅助应用,以及这一趋势面临的前景和挑战。智慧医疗是指通过先进的信息技术,如人工智能、物联网、大数据等,实现医疗数…

Javaweb考前复习冲刺(不断更新版)

Javaweb考前复习冲刺 第一章: JavaWeb 入门 JavaWeb是指:以Java作为后台语言的项目工程。 javaweb项目创建的过程: 首先集成Tomcat服务器环境新建dynamic web project部署工程运行 路由含义: ​ http://localhost:8080/工程…

[NCTF2019]Fake XML cookbook1

提示 xml注入 一般遇到像登录页之类的就因该想到sql注入、弱口令或者xml等 随便输入抓包 这里明显就是xml注入 这里我们来简单了解一下xml注入 这里是普通的xml注入 xml注入其实和sql注入类似&#xff0c;利用了xml的解析机制如果系统没有将‘<’‘>’进行转义&#xff0…

Autosar CAN报文周期抖动可能的原因分析+解决方法(总结)

一、背景 在Autosar项目中我们经常会遇到各种CAN报文在CANOE上抓取的图形周期抖动,因此需要通过一些可能的原因分析解决报文周期不准的问题。 那么下面就我根据实际项目中遇到的一些可能的原因做一些总结(后续持续完善)。 二、可能的原因及解决方案 1、可能原因:CPU idl…