当前位置: 首页 > news >正文

代码随想录二刷Day03链表: 24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表||

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

文章链接:代码随想录 (programmercarl.com)

思路:

(1)首先如果要处理相邻两个节点的话,一定需要操作两个节点的前一个节点才可以,因此,本题需要设定一个虚拟头节点

(2)两两交换节点后,原有的链表就断了,因此需要对链表的节点进行存储

(3)基于此,应该使用双指针,pre指向dummynode(虚拟头节点),cur指向一开始的头节点

(4)注意循环条件,因为涉及到cur.next.next,因此要确保cur和cur.next不为空,否则会报错

Java代码:

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode swapPairs(ListNode head) {//先判断特殊情况if(head == null){return head;}//定义一个虚拟头节点ListNode dummynode = new ListNode();dummynode.next = head;//双指针ListNode pre = dummynode;ListNode cur = head;while(cur != null && cur.next != null){//保存节点2ListNode temp0 = cur.next;//保存节点3ListNode temp1 = cur.next.next;//开始指向节点pre.next = temp0;temp0.next = cur;cur.next = temp1;pre = cur;cur = temp1;}return dummynode.next;}
}

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

文章链接:代码随想录 (programmercarl.com)

思路:单指针和双指针(利用对称性)都可以操作,看代码注释,其中双指针代码自己又犯了相同的错误,错误如下

(1)错误1是在最后定位好pre,cur指针位置后,直接就写了pre.next = cur,如果此时链表为[1],那么pre = dummynode,cur = head,此时pre.next = cur,根本就没有删除

(2)错误2是在初始化cur位置后开始同时移动pre和cur时的循环条件写错,应该写成cur.next != null,不然pre指针会多走一个位置

Java代码:(单个指针)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {//先判断特殊情况if(head == null){return head;}//设置一个虚拟头节点ListNode dummynode = new ListNode();dummynode.next = head;//定义一个指针ListNode cur = dummynode;//统计链表有多少个节点int size = 0;while(cur != null){cur = cur.next;size++;}//重置指针位置cur = dummynode;//找到要删除的节点的前一个节点for(int i = 0;i < size -1 - n;i++){cur = cur.next;}//保存删除节点的后一个节点ListNode temp = cur.next.next;cur.next = temp;return dummynode.next;}
}

Java代码:(双指针)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {//先判断特殊情况if(head == null){return head;}//设置一个虚拟头节点ListNode dummynode = new ListNode();dummynode.next = head;//双指针ListNode pre = dummynode;ListNode cur = dummynode;//初始化cur指针位置,对称位置for(int i = 0; i < n;i++){cur = cur.next;}//此时开始同时移动pre和cur指针while(cur.next != null){cur = cur.next;pre = pre.next;}//此时pre指针指向要删除节点的前一个节点//这里无需判断pre.next是否为空,因为cur指针在pre后面,前面的while循环已经判断过了ListNode temp = pre.next.next;pre.next = temp;return dummynode.next;}
}

面试题 02.07. 链表相交

文章链接:代码随想录 (programmercarl.com)

思路:

(1)首先先计算两个链表的长度,并且定义两个指针,通过移动指针,让两个链表对齐开始遍历

(2)默认定义指针cur1指向长链表,指针cur2指向短链表

(3)从长度一致的地方开始同时遍历

Java代码:(看代码注释)

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode getIntersectionNode(ListNode headA, ListNode headB) {//默认cur1指针指向长链表,cur2指针指向短链表ListNode cur1 = headA;ListNode cur2 = headB;//先计算两个链表的长度int lenA = 0;int lenB = 0;while(cur1 != null){lenA++;cur1 = cur1.next;}while(cur2 != null){lenB++;cur2 = cur2.next;}//计算完长度后,重置一下两个指针cur1 = headA;cur2 = headB;//因为不知道哪个链表更长,因此默认cur1指针指向长链表,cur2指针指向短链表//假设lenB比lenA要长if(lenB > lenA){//先交换长度int templen = lenA;lenA = lenB;lenB = templen;//再交换两个指针ListNode temp = cur1;cur1 = cur2;cur2 = temp;}//开始对齐指针,让长链表的指针往后移动lenA - lenB个步数int gap = lenA - lenB;while(gap > 0){cur1 = cur1.next;gap--;}//此时已经对齐while(cur1 != null && cur2 != null){//有相交的节点if(cur1 == cur2){return cur1;}cur1 = cur1.next;cur2 = cur2.next;}//没有相交的节点return null;}
}

142.环形链表||

文章链接:代码随想录 (programmercarl.com)

思路:此题本质上是个数学题,定义快慢指针,fast指针走过的节点数 = slow指针走过的节点数 * 2

        类似于数学上的追逐问题,想要找到节点,首先需要进行画图分析,在获取到x = z这个信息后,就知道了要用双指针来首先找到快慢指针在环中相遇的地方,后面在重新定义一个指针index,让 index 指针以步长1和slow指针依次遍历,两者相遇就找到了环的入口。

Java代码:

/*** Definition for singly-linked list.* class ListNode {*     int val;*     ListNode next;*     ListNode(int x) {*         val = x;*         next = null;*     }* }*/
public class Solution {public ListNode detectCycle(ListNode head) {//先判断特殊情况if(head == null){return head;}//定义快慢指针,快指针步长为1,慢指针步长为2ListNode fast = head;ListNode slow = head;//先找到两个指针相遇的节点位置while(slow != null && fast != null && fast.next != null){slow = slow.next;fast = fast.next.next;//找到了两个指针在环内相遇的位置if(slow == fast){ListNode index = head;while(slow != null && index != null){//找到了入环的第一个节点if(slow == index){return index;}index = index.next;slow = slow.next;}}}//没有找到,返回Nullreturn null;}
}

相关文章:

代码随想录二刷Day03链表: 24.两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交,142.环形链表||

24.两两交换链表中的节点 文章链接&#xff1a;代码随想录 (programmercarl.com) 思路&#xff1a; &#xff08;1&#xff09;首先如果要处理相邻两个节点的话&#xff0c;一定需要操作两个节点的前一个节点才可以&#xff0c;因此&#xff0c;本题需要设定一个虚拟头节点 …...

我应该在我的博客上写什么? 介绍如何撰写初学者容易担心的文章

我想有很多人开了博客&#xff0c;但想不起来写作&#xff0c;无法取得进展。 博客的主题和文章的内容不会仅仅通过写你想做的事情来工作。 重要的是要了解用户想要阅读的内容以及人们可能收集的内容&#xff0c;并将其与您想要编写的内容很好地匹配。 这一次&#xff0c;我…...

嵌入式C语言设计模式 --- 外观模式

1 - 什么是外观模式? 外观模式(Facade Pattern),是一种比较简单的结构型模式,它存在的目的,也是为了简单。 外观模式隐藏了一系列接口的复杂性,旨在为外部客户端提供一个更高层次且统一简单的接口,简化了客户端调用某些模块的一系列操作。 外观模式应该是软件工程师…...

若依ruoyi——手把手教你制作自己的管理系统【三、代码生成】

昨天情人节一(&#xffe3;︶&#xffe3;*)) 送给赛利亚一((*&#xffe3;3&#xffe3;)╭ ********* 专栏略长 爆肝万字 细节狂魔 请准备好一键三连 ********* 修改后的页面&#xff1a; 干干净净贼舒服一Ψ(&#xffe3;∀&#xffe3;)Ψ——Ψ(&#xffe3;∀&#x…...

SCI论文写作神器集合 —— 超级实用

特此声明&#xff1a; 本文拷贝多处别人的内容&#xff0c;并给出具体的链接 本文所提到的软件都为博主在文章撰写过程中发掘的比较实用的工具&#xff0c;旨在帮助小伙伴们更快更有效率的完成文章发表&#xff0c;如果其他好用的工具&#xff0c;欢迎各位交流~~ 一、文献搜索神…...

MAC 系统安装多版本 JDK 并任意切换

1、背景 在进行 Java 开发的过程中&#xff0c;我们可能需要使用不同版本的 JDK。例如&#xff1a;一些旧的 Java 应用程序只能在旧版本的 JDK 上运行&#xff0c;而一些新的 Java 应用程序需要较新的 JDK 才能运行。 在 MAC 系统上&#xff0c;如何安装多个版本的 JDK 并配置…...

配置 Smart Link 接口时需注意的互斥命令

配置 Smart Link 接口时需注意的互斥命令 一、接口加入Smart Link组功能与以下功能互斥一、接口加入Smart Link组功能与以下功能互斥 注&#xff1a;当接口已经加入Smart Link组&#xff0c;则不能再配置以下功能&#xff1b;反之&#xff0c;当接口已经配置以下功能&#xff…...

QT的下载和安装

这里介绍的是QT官方方式下载&#xff0c;每次都让我很糊涂&#xff0c;就记载一下。先是下载QT online installerhttps://www.qt.io/download 在下方有Go Open Sourcehttps://www.qt.io/download-open-source 在下方有Download the Qt Online installerhttps://www.qt.io/downl…...

nacos配置中心与服务注册中心

文章目录 目录 文章目录 前言 一、服务注册与发现中心 二、配置中心 总结 前言 Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它是 Spring Cloud Alibaba 组件之一&#xff0c;负责服务注册发现和服务配置. [服务治理的作用和微服务配置管理] Na…...

UE4 手把手教你做插件(1) 从代码引用插件

0&#xff0c;前言 我看的是 技术宅阿棍儿 的视频&#xff0c;B站有。 系列视频&#xff1a;从代码引用插件_哔哩哔哩_bilibili 看不懂&#xff0c;只能边查资料边看&#xff0c;讲的顺序有点乱 1&#xff0c;根据视频提示创建第三方插件 注意&#xff1a;如果只有空白插件的情…...

【Mybatis源码解析】一级缓存和二级缓存源码解析

文章目录缓存使用缓存源码测试代码上一篇《【Mybatis源码解析】mapper实例化及执行流程源码分析》&#xff0c;主要讲解了Mybatis的基本原理一级执行的流程&#xff0c;这一章来讲一下Mybatis的两个缓存&#xff1a;一级缓存和二级缓存。 因为网上大部分都是使用xml配置的方式…...

你知道MES实施的要点吗?

随着国家行动纲领&#xff1a;中国制造2025&#xff08;智能制造&#xff09;的发布&#xff0c;MES系统在制造业的工厂中所占比重越来越大&#xff0c;越来越多的工厂选择使用MES完成工厂的信息化、数字化、智能化生产。伴随着企业对MES的需求不断增大&#xff0c;生产MES的厂…...

告诉你为什么为什么 SELECT COUNT(*) FROM table 在 InnoDB 引擎中比 MyISAM引擎中的速度慢

统计一张表的总数量&#xff0c;是我们开发中常有的业务需求&#xff0c;通常情况下&#xff0c;我们都是使用 select count(*) from table SQL 语句来完成。随着业务数据的增加&#xff0c;你会发现这条语句执行的速度越来越慢&#xff0c;为什么它会变慢呢&#xff1f; 为什…...

Redis 命令和Redis key键

Redis 命令 Redis 命令用于在 Redis 服务器上执行一些操作&#xff0c;而命令运行的方式是通过客户端命令行来执行的&#xff0c;这种方式也被称为“命令行模式”。因此想要在 Redis 服务器上运行命令&#xff0c;您首先需要开启一个 Redis 客户端。操作方法如下&#xff1a; …...

如何入侵服务器

根据中华人民共和国刑法&#xff1a; 第二百八十六条违反国家规定&#xff0c;对计算机信息系统功能进行删除、修改、增加、干扰&#xff0c;造成计算机信息系统不能正常运行&#xff0c;后果严重的&#xff0c;处五年以下有期徒刑或者拘役&#xff1b;后果特别严重的&#xff…...

在Windows10上安装虚拟机---VMware 17 Pro下载与安装

在Windows10上安装虚拟机---VMware下载与安装0 前言1 下载VMware 17 pro2 安装VMware 17 Pro3. 打开Vmware0 前言 电脑原生系统&#xff1a;Windows10虚拟机软件&#xff1a;VMware 17 pro准备好安装虚拟机的文件夹路径 1 下载VMware 17 pro 下载网址&#xff1a;VMware 官网…...

生命周期函数、组件

1. 生命周期函数 beforeCreate &#xff1a; 无法通过 vm 访问data 中的数据、methods 中的方法created &#xff1a;可以访问 vm 中的 data 的数据&#xff0c; methods 中的方法beforeMount&#xff1a;为经 Vue 编译的 dommounted&#xff1a;经过 vue 编译的 dom &#x…...

蓝桥杯 stm32 PWM 测量频率

本文代码使用 HAL 库。 文章目录 前言一、PWM 原理图:二、CubeMX 创建工程:三、PWM 单路测频:四、详细代码:1. 获取 CNT函数。2. 设置CNT为 0 函数3. 开启TIM2_CH1的输入捕获中断函数4. TIM 回调函数5. 在 LCD 上显示 R40 和 R39 的频率。总结前言 一、PWM 原理图: 参考…...

Docker CPU 资源控制

01-本章背景知识 在生产环境里运行服务的一个主要问题是如何公平有效的进行资源分配。 1、Docker 容器使用核心操作系统的 Cgroups 管理容器的 CPU资源分配。 2、Docker 容器资源竞争时&#xff0c;默认使用简单均分&#xff08;CFS&#xff09;算法。 3、Docker 容器也可以根…...

小红书数据平台:笔记爆文率提升的三大秘诀公式!

导语 对于小红书商家 / 博主来说&#xff0c;写出爆文就像买彩票&#xff0c;根本不能预知哪一篇会爆。2023年&#xff0c;小红书哪些内容会脱颖而出呢&#xff1f;我们又该如何把握热点趋势&#xff0c;实现优质内容转化出爆文~ 美妆作为小红书的长红赛道&#xff0c;本文我…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...

算法:模拟

1.替换所有的问号 1576. 替换所有的问号 - 力扣&#xff08;LeetCode&#xff09; ​遍历字符串​&#xff1a;通过外层循环逐一检查每个字符。​遇到 ? 时处理​&#xff1a; 内层循环遍历小写字母&#xff08;a 到 z&#xff09;。对每个字母检查是否满足&#xff1a; ​与…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...