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

04 开发第一个组件

概述 在Vue3中&#xff0c;一个组件就是一个.vue文件。 在本小节中&#xff0c;我们来开发第一个Vue3组件。这个组件的功能非常的简单&#xff0c;只需要在浏览器上输出一个固定的字符串”欢迎跟着Python私教一起学Vue3“即可。 实现步骤 第一步&#xff1a;新增src/compon…

SpringCloud 和 Linux 八股文第一期五问五答

SpringCloud 和 Linux 八股文第一期五问五答 作者&#xff1a;程序员小白条&#xff0c;个人博客 相信看了本文后&#xff0c;对你的面试是有一定帮助的&#xff01; ⭐点赞⭐收藏⭐不迷路&#xff01;⭐ 1.Linux怎么查看文件内容 在 Linux 系统中&#xff0c;有多种方式可以…

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;附加属性快捷方式

第25节: Vue3 带组件

在UniApp中使用Vue3框架时&#xff0c;你可以使用组件来封装可复用的代码块&#xff0c;并在需要的地方进行渲染。下面是一个示例&#xff0c;演示了如何在UniApp中使用Vue3框架使用带组件&#xff1a; <template> <view> <button click"toggleActive&q…

解决引入外部文件(图片、js等)出现 403 net::ERR_ABORTED 的问题

页面中引入外网的连接资源&#xff0c;会产生一个新的http请求。为了安全&#xff08;URL里可能包含用户信息&#xff09;&#xff0c;浏览器通常都会给这写请求头加上表示来源的referrer 字段。 因此&#xff0c;此时咱们须要隐藏外部连接中的referrer&#xff0c;在head标签…

React的JSX

React JSX 大家好,欢迎来到 React JSX 的课程。在这一课中,我们将学习如何在 React 中使用 JSX。 什么是 JSX? JSX 是一种 JavaScript 的语法扩展,它看起来很像 XML。 const element = <h1>Hello, world!</h1>;这种看起来可能有些奇怪的标签语法既不是字符…

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…

​optparse --- 命令行选项的解析器​

源代码&#xff1a; Lib/optparse.py 3.2 版后已移除: optparse 模块已被弃用并且将不再继续开发&#xff1b;开发将转至 argparse 模块进行。 optparse 是一个相比原有 getopt 模块更为方便、灵活和强大的命令行选项解析库。 optparse 使用更为显明的命令行解析风格&#xff…

HTML面试题

HTML面试题 什么是HTML&#xff1f;它是用于什么目的的&#xff1f; HTML代表超文本标记语言&#xff08;HyperText Markup Language&#xff09;&#xff0c;它是一种用于创建网页的标记语言。HTML使用标签来定义网页的结构、内容和样式。 HTML5与HTML4有什么不同&#xff1f…

Linux---用户相关操作

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