代码随想录算法训练营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;}
}

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

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

相关文章

小姐姐跳舞,AI 视频生成太酷了

大家好,我是章北海 最近AI视频领域的研究进展神速,看得眼花缭乱。 这里老章就把最近几天看过印象深刻的四个项目介绍给大家,同时附上项目相关简介、论文、代码等资料,感兴趣的同学可以深度研究一下。 《SMPLer-X:放大表达性人体…

uniapp实现地图电子围栏功能

该功能使用uniapp中内置组件map实现 效果图预览&#xff1a; 实现过程&#xff1a; 1.文档&#xff1a; 2.代码&#xff1a; <template><view><map :style"width: 100%; height:screenHeight" :latitude"latitude" :longitude"longit…

mysql8支持远程访问

上面的localhost要改为%号就打开了远程访问 ALTER USER root% IDENTIFIED WITH mysql_native_password BY fengzi2141;

【第1期】SpringSecurity基于角色和权限的细粒度接口权限控制

SpringSecurity 细粒度权限控制 一、Role 和 Authority的区别 角色用来表示某一类权限的集合&#xff0c;权限粒度更小&#xff0c;方便细粒度控制 二、创建用户、角色、权限相关表&#xff1a; CREATE TABLE common_user (id bigint(20) NOT NULL COMMENT 主键id,login_na…

ES查询流程

在ES中查询分为两类&#xff1a;1.基于文档ID查询&#xff0c;2.按照非文档ID查询。 基于文档id查询 1.基于文档ID查询 当执行如下查询时&#xff1a; GET /megacorp/employee/1ES在执行上述查询的具体过程如下&#xff1a; 1、客户端向 Node 1 发送获取请求&#xff0c;此…

【注解和反射】--05 反射的性能对比、反射操作泛型和注解

反射 05 性能对比分析 下面对比了通过普通new方式、反射方式及关闭Java语言安全检测的反射方式三种情况下&#xff0c;程序的性能(所需时间)。 package com.duo.reflection;import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;//性能测试…

WPF——命令commond的实现方法

命令commond的实现方法 属性通知的方式 鼠标监听绑定事件 行为&#xff1a;可以传递界面控件的参数 第一种&#xff1a; 第二种&#xff1a; 附加属性 propa&#xff1a;附加属性快捷方式

CCNP课程实验-OSPF-CFG

目录 实验条件网络拓朴需求 配置实现基础配置1. 配置所有设备的IP地址 实现目标1. 要求按照下列标准配置一个OSPF网络。 路由协议采用OSPF&#xff0c;进程ID为89 &#xff0c;RID为loopback0地址。3. R4/R5/R6相连的三个站点链路OSPF网络类型配置成广播型&#xff0c;其中R5路…

springboot使用EasyExcel导出数据

springboot使用EasyExcel导出数据 简介&#xff1a;本文主要描述使用EasyExcel导出数据的简单流程&#xff0c;事实上企业需求一般都比较简单&#xff0c;就是表单数据输出到Excel即可&#xff0c;如果数据量大的话&#xff0c;为了避免占用内存过高或者OOM&#xff0c;使用多…

Android Studio好用的插件推荐

目录 一、插件推荐 二、如何下载 1.点击File—>Settings ​2.点击Plugins然后进行搜索下载 三、Android Studio 模板 一、插件推荐 这个插件可以为您自动生成Parcelable代码。Parcelable是一种用于在Android组件之间传递自定义对象的机制&#xff0c;但手动编写Parcela…

[python]用python获取EXCEL文件内容并保存到DBC

目录 关键词平台说明背景所需库实现过程方法1.1.安装相关库2.代码实现 关键词 python、excel、DBC、openpyxl 平台说明 项目Valuepython版本3.6 背景 在搭建自动化测试平台的时候经常会提取DBC文件中的信息并保存为excel或者其他文件格式&#xff0c;用于自动化测试。本文…

Flowable-源码分析-2启动

引擎启动流程如图 // ProcessEngineFactoryBean.getObjectpublic ProcessEngine getObject() throws Exception {// 如果 processEngine 为空if (processEngine null) {// 初始化表达式管理器initializeExpressionManager();// 初始化事务外部管理initializeTransactionExtern…

Linux---用户相关操作

1. 创建用户 命令说明useradd创建(添加)用户 useradd命令选项: 选项说明-m自动创建用户主目录,主目录的名字就是用户名-g指定用户所属的用户组&#xff0c;默认不指定会自动创建一个同名的用户组 创建用户效果图: 查看所有用户信息的文件效果图: 说明: useradd 命令的使用…

嵌入式中的门电路详讲

NOT门电路 NOT(非门)是数字逻辑电路中的一种基本逻辑门,也称为反相器。它执行的是逻辑非操作,即将输入信号取反。NOT门具有一个输入和一个输出。 A输入,B输出,以下是真值表: A B 0 1 1 0 AND门电路 AND(与门)是数字逻辑电路中的一种基本逻辑门,用于执行逻辑与操作。…

【运维笔记】mvware centos挂载共享文件夹

安装mvware-tools 这里用的centos安装 yum install open-vm-tools 设置共享文件夹 依次点击&#xff1a;选项-共享文件夹-总是启用-添加&#xff0c;安装添加向导操作添加自己想共享的文件夹后。成功后即可在文件夹栏看到自己共享的文件夹 挂载文件夹 临时挂载 启动虚拟机&…

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

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

Leetcode刷题笔记题解(C++):224. 基本计算器

思路&#xff1a; step 1&#xff1a;使用栈辅助处理优先级&#xff0c;默认符号为加号。 step 2&#xff1a;遍历字符串&#xff0c;遇到数字&#xff0c;则将连续的数字字符部分转化为int型数字。 step 3&#xff1a;遇到左括号&#xff0c;则将括号后的部分送入递归&#x…

一个简单的光线追踪渲染器

前言 本文参照自raytracing in one weekend教程&#xff0c;地址为&#xff1a;https://raytracing.github.io/books/RayTracingInOneWeekend.html 什么是光线追踪&#xff1f; 光线追踪模拟现实中的成像原理&#xff0c;通过模拟一条条直线在场景内反射折射&#xff0c;最终…

秋招上岸记录咕咕咕了。

思考了一下&#xff0c;感觉并没有单独写这样一篇博客的必要。 能够写出来的&#xff0c;一些可能会对人有帮助的东西都做进了视频里面&#xff0c;未来会在blbl发布&#xff0c;目前剪辑正在施工中&#xff08;&#xff1f;&#xff09; 另外就是&#xff0c;那个视频里面使…

作为一个的软件测试工程师,想拿到自己想要的薪资,需要具备哪些能力?

如果只是想成为一名低薪的测试工程师&#xff0c;只要掌握功能测试就可以。 但是如果想成为一名高薪的测试工程师&#xff0c;那就要打造你的不可替代性。 可是&#xff0c;你可能会说&#xff1a;“我现在就是个普通职员啊&#xff0c;我就是个普通人&#xff0c;我目前还没有…