代码随想录算法训练营第3天(链表1)| 203.移除链表元素 707.设计链表 206.反转链表

一、203.移除链表元素

题目:203. 移除链表元素 - 力扣(LeetCode)

视频:手把手带你学会操作链表 | LeetCode:203.移除链表元素_哔哩哔哩_bilibili

讲解:代码随想录

注意:

针对头结点和非头结点的删除方式是不一样的:

正常节点:要找到该节点的上一节点

头结点:直接把 head 往后移一位

所以就要进行判断,要删除的节点是不是头结点(方法一)

或者,在头结点前设立一个虚拟节点(dummy head)(方法二)

方法一:判断链表删除元素

class Solution {public ListNode removeElements(ListNode head, int val) {while (head != null && head.val == val) {head = head.next;}ListNode curr = head;while (curr != null && curr.next != null) { if (curr.next.val == val) {curr.next = curr.next.next;} else {curr = curr.next;}}return head;}
}

要点 1:

判断头结点是否符合的时候,使用 if 就只能判断一次,如果第二个元素也符合条件,就漏删了

所以要用 while ,在头结点不符合条件的时候,才继续往下走

要点 2:

往后查找的时候,要定义一个指针,那么指针的位置指向哪里?

如果是第二位,第二位符合删除条件,找不到上一位的 next 指针。(x)

所以要指向头结点

尝试过程:

class Solution {public ListNode removeElements(ListNode head, int val) {while (head != null && head.val == val) {head = head.next;}ListNode curr = head;while (curr.next != null && curr != null) {     //这里有问题!!if (curr.next.val == val) {curr.next = curr.next.next;} else {curr = curr.next;}}return head;}
}

报这个错误的原因:

虽然从逻辑上看是想同时确保当前节点 curr 和它的下一个节点 curr.next 都不为 null,但如果 curr 本身已经是 null 了,再去访问 curr.next 就会直接抛出空指针异常。

正确的做法应该是先判断 curr 是否为 null再去判断 curr.next 是否为 null,像这样修改条件为 while (curr!= null && curr.next!= null)

方法二:设置虚拟头结点

class Solution {public ListNode removeElements(ListNode head, int val) {ListNode dummy = new ListNode();dummy.next = head;ListNode curr = dummy;while(curr != null && curr.next != null){if(curr.next.val == val){curr.next = curr.next.next;} else {curr = curr.next;}}return dummy.next;}
}

注意头结点的指针是不能更改的,因为最后要用到头结点返回。

二、707.设计链表

题目:707. 设计链表 - 力扣(LeetCode)

视频:帮你把链表操作学个通透!LeetCode:707.设计链表_哔哩哔哩_bilibili

讲解:代码随想录

利用虚拟头结点方式,对所有结点统一操作。

class MyLinkedList {class ListNode {int val;ListNode next;ListNode(int val) {this.val = val;}}private int size;private ListNode head;// 初始化public MyLinkedList() {this.size = 0;this.head = new ListNode(0);}public int get(int index) {if (index < 0 || index >= size) {return -1;}ListNode cur = head;for (int i = 0; i <= index; i++) {cur = cur.next;}return cur.val;}public void addAtHead(int val) {ListNode newNode = new ListNode(val);newNode.next = head.next;head.next = newNode;size++;}public void addAtTail(int val) {ListNode newNode = new ListNode(val);ListNode cur = head;while (cur.next != null) {cur = cur.next;}cur.next = newNode;size++;}public void addAtIndex(int index, int val) {if (index < 0 || index >= size) {return;}ListNode cur = head;for (int i = 0; i < index; i++) {cur = cur.next;}ListNode newNode = new ListNode(val);newNode.next = cur.next;cur.next = newNode;size++;}public void deleteAtIndex(int index) {if(index < 0 || index >=size){return;}ListNode cur = head;for(int i=0; i<index; i++){cur = cur.next;}cur.next = cur.next.next;size--;}
}

三、206.反转链表

题目:

视频:

讲解:


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

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

相关文章

NetMQ里Push-Pull模式,消息隔一收一问题小记

问题&#xff1a; 本机环境下&#xff0c;在push端向pull端发送消息的过程中&#xff0c;发现同一个进程里的pusher和puller代码&#xff0c;可以准确地完成收发&#xff1b; 然而&#xff0c;将代码放在两个进程里&#xff0c;将pusher发送的消息从1计数&#xff0c;puller端竟…

CES Asia 2025科技盛宴,AI智能体成焦点

2025第七届亚洲消费电子技术展&#xff08;CES Asia赛逸展&#xff09;将在北京拉开帷幕&#xff0c;AI智能体有望成为展会的核心亮点。 深圳市人工智能行业协会发文表示全力支持CES Asia 2025&#xff08;赛逸展&#xff09;&#xff0c;称其为人工智能领域的创新发展提供了强…

matlab编写分段Hermite插值多项式

文章目录 原理使用分段Hermite插值多项式原因公式第一类的两个插值积函数第二类的两个插值积函数 例题法一法二 代码分段 Hermite 插值的思路&#xff1a;分段 Hermite 插值多项式的构造&#xff1a;MATLAB 实现代码&#xff1a;结果如图&#xff1a;注归一化变量的作用&#x…

Cline(原Claude Dev)开源的IDE AI插件,如何搭配OpenRouter实现cursor功能,Cline怎么使用

Cline&#xff08;原Claude Dev&#xff09;是一个开源的IDE AI插件&#xff0c;可以使用你的命令行界面和编辑器的人工智能助手。 你可以直接在VS Code编辑器进行安装。如果你使用过Cursor AI IDE的话&#xff0c;可以尝试最新发布的Cline3.1版本。 在OpenRouter上&#xff0…

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析&#xff1a; &#xff08;1&#xff09;总部和分部要求网络拓扑简单&#xff0c;方便维护&#xff0c;网络有扩展和冗余性&#xff1b; &#xff08;2&#xff09;总部分财务部&#xff0c;人事部&#xff0c;工程部&#xff0c;技术部&#xff0c;提供…

企业级PHP异步RabbitMQ协程版客户端 2.0 正式发布

概述 workerman/rabbitmq 是一个异步RabbitMQ客户端&#xff0c;使用AMQP协议。 RabbitMQ是一个基于AMQP&#xff08;高级消息队列协议&#xff09;实现的开源消息组件&#xff0c;它主要用于在分布式系统中存储和转发消息。RabbitMQ由高性能、高可用以及高扩展性出名的Erlan…

AsyncOperation.allowSceneActivation导致异步加载卡死

先看这段代码&#xff0c;有个诡异的问题&#xff0c;不确定是不是bug public class Test : MonoBehaviour {void Start(){StartCoroutine(LoadScene(Ego.LoadingLevel));}IEnumerator LoadScene(string sceneName){LoadingUI.UpdateProgress(0.9f);yield return new WaitForS…

C#使用MVC框架创建WebApi服务接口

第一步,使用VS2019新建MVC-Web API应用程序 创建BridgeApi 第二步,运行将生成默认的示例网页,网页Url为 https://localhost:44361/home/index 右键 项目 添加 WebAPI控制器类 添加 我们可以看到App_Start目录下 有三个文件: BundleConfig.cs代表 捆绑文件的引用 有脚本文件…

wordpress 房产网站筛选功能

自定义分类法创建 add_action( init, ashu_post_type ); function ashu_post_type() {register_taxonomy(province,post,array(label => 省,rewrite => array( slug => province ),hierarchical => true));register_taxonomy(city,post,array(label => 市,rewr…

hive迁移后修复分区慢,怎么办?

我有1个30TB的分区表&#xff0c;客户给的带宽只有600MB&#xff0c;按照150%的耗时来算&#xff0c;大概要迁移17小时。 使用hive自带的修复分区命令&#xff08;一般修复分区比迁移时间长一点&#xff09;&#xff0c;可能要花24小时。于是打算用前面黄大佬的牛B方案。 Hive增…

慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(一)

通过左侧导航菜单〖业务建模〗→〖业务对象〗&#xff0c;进入该界面&#xff1b;在该界面可以查看到系统中已存在的业务对象&#xff1b; 1.新建业务对象 在DatalinkX中进入【业务建模】的【业务对象】页面&#xff0c;点击【新建】按钮进入新建页面&#xff1b; 新建页面左侧…

Linux系统之hostname相关命令基本使用

Linux系统之hostname相关命令基本使用 一、检查本地系统版本二、hostname命令的帮助说明中文帮助说明 三、hostname命令的基本使用1. 查看计算机名2. 查看本机上所有IP地址3. 查看主机FQDN4. 查看短主机名 四、hostnamectl命令的使用1. 查看主机详细信息2. 设置主机名3. hostna…

DC系列靶场渗透--DC-3

目录 环境搭建 开始渗透 扫存活 扫端口 扫服务 查看80端口 尝试在80端口中的登陆页面寻找sql注入失败 扫目录 进入/htaccess.txt目录看一下 我们尝试找一下Joomla3.7.0版本的漏洞 我们尝试利用该漏洞 查数据库名 查表名 查列名 查数据 找到密码的可能的编码方式…

js代理模式

允许在不改变原始对象的情况下&#xff0c;通过代理对象来访问原始对象。代理对象可以在访问原始对象之前或之后&#xff0c;添加一些额外的逻辑或功能。 科学上网过程 一般情况下,在访问国外的网站,会显示无法访问 因为在dns解析过程,这些ip被禁止解析,所以显示无法访问 引…

uniapp 之 uni-forms校验提示【提交的字段[‘xxx‘]在数据库中并不存在】解决方案

目录 场景问题代码结果问题剖析解决方案 场景 uni-forms官方组件地址 使用uniapp官方提供的组件&#xff0c;某个表单需求&#xff0c;单位性质字段如果是高校&#xff0c;那么工作单位则是高校的下拉选择格式&#xff0c;单位性质如果是其他的类型&#xff0c;工作单位则是手动…

深度学习知识点:RNN

文章目录 1.简单介绍2.网络结构3.应对梯度消失 1.简单介绍 循环神经网络&#xff08;RNN&#xff0c;Recurrent Neural Network&#xff09;是一类用于处理序列数据的神经网络。与传统网络相比&#xff0c;变化不是特别大&#xff0c;不如CNN的变化那么大。 为什么要有循环神经…

(leetcode算法题)287. 寻找重复数(经典题目,二分解法)

如果一个题目限定了数据范围是[1, n]内的整数&#xff0c;那么这个题目可以思考的就是 nums[i]和 i 的关系&#xff0c;769. 最多能完成排序的块 这个题就使用到了子数组中最大值和 连续[0, n - 1]的关系 而对于本题来说&#xff0c;也可以思考[1, n] 和 nums[i] 的关系&…

获得PostgreSQL中级认证后,可以从事哪些工作岗位?

获得 PostgreSQL 中级认证后&#xff0c;可以获得的岗位 数据库管理类 数据库管理员&#xff08;DBA&#xff09;&#xff1a;负责 PostgreSQL 数据库的日常维护、监控、备份与恢复、性能优化、安全管理等工作。确保数据库的稳定运行和数据的安全性、完整性&#xff0c;及时处理…

4.1、二纤单向、二纤双向、四纤双向,网络级保护

1、线性复用段保护&#xff08;LMSP&#xff09; 就像是给网络业务传输准备的一个 “保险”。在 SDH 和 MSTP 网络里&#xff0c;业务信号要通过一段一段的路&#xff08;复用段&#xff09;来传输&#xff0c;LMSP 就是为了保证这些路出问题的时候&#xff0c;业务还能正常走。…

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功

【spark源码修改】hive3.1.3 spark3.5.4编译,需要修改源码,最终编译成功 1. 准备安装包与maven编译环境1.1 安装环境准备1.2 修改pom1.3 打包命令2. 编译与问题解决2.1 开始编译 失败, 缺包pentaho-aggdesigner-algorithm:pom:5.1.5-jhyde2.2 Hive Spark Remote Client 模块…