代码随想录算法训练营第3天|LeetCode

203.移除链表元素

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

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

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

第一想法

在链表前设置个虚拟头结点,那么删除第一个结点就和普通结点一样,最后返回虚拟头结点的next结点即可

代码随想录想法

问题

初版代码出现的问题:

虚拟头结点命名为dummyNode

用两个参数的构造器new dummyNode,即 ListNode dummyNode = new ListNode(-1,head),既新建结点,又完成赋值。

cur = cur.next提到if-else判断逻辑外面,不管怎么样,每次cur都是要往前走的。

删除结点语句是prev.next = cur.next,画个图就明白了。

代码

/**
 * 自己写的初版代码,有错误
 */
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        ListNode virtualNode = new ListNode();//可以用两个参数的构造器合并成一句话,虚拟头结点用dummyNode
        virtualNode.next=head;//先虚拟一个头结点指向head
        ListNode currentNode = head;
        ListNode prevNode = virtualNode;
        while (currentNode != null) {
            if(currentNode.val==val){
                prevNode.next=currentNode.next.next;//代码逻辑有误,当删除最后一个时i,currentNode.next为空,prevNode.next指向空,.next.next就有误了。
                currentNode = currentNode.next;//提到判断逻辑外面,反正都要操作

            }else{
                currentNode =currentNode.next;
                prevNode = prevNode.next;
            }
        }
        return virtualNode.next;
    }
}
/**
 * 看完代码随想录更正后的
 */
class Solution1{
    public ListNode removeElements(ListNode head, int val) {
        ListNode dummyNode = new ListNode(-1,head);
        ListNode  prev = dummyNode;
        ListNode cur = head;
        while (cur != null){
            if(cur.val==val){
                prev.next = cur.next;
            }else{
                prev = cur;
            }
            cur = cur.next;
        }
        return dummyNode.next;
    }
}

203.设计链表

题目链接/文章讲解/视频讲解:代码随想录

第一想法

熟悉链表,简单模拟就行

问题

删除时size要--,添加时size++

力扣里自定义结点是ListNode

代码

203.移除链表元素

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

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

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

第一想法

《算法通关村第二关——终于学会链表反转了》-CSDN博客

直接反转法的初始化是prev = null ,cur = head;和借助虚拟结点是不一样的。

代码随想录

写完双指针后理解递归法就比较容易一些,但是自己是写不出来的。只能感觉是理解会了,用递归法优化了两个指针一同向前移动的技巧。

代码

/**
 * 建立虚拟头结点反转
 */
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode dummy = new ListNode(-1,head);//新建虚拟结点
        ListNode cur = head;
        while (cur!=null){
            ListNode next = cur.next;
            cur.next = dummy;
            dummy.next = cur;
            cur = next;
        }
        return dummy.next;
    }
}
/**
 * 直接反转
 */
class Solution1 {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode cur = head;
        while (cur!=null){
            ListNode next = cur.next;//先拿头指针
            cur.next = prev;
            prev = cur;
            cur = next;
        }
        return prev;
    }
}
/**
 * 递归法
 */
class Solution2{
    public ListNode reverseList(ListNode head) {
        return reverse(null,head);
    }
    private ListNode reverse(ListNode prev,ListNode cur){
        //终止条件
        if(cur==null)
            return prev;
        ListNode next = cur.next;
        cur.next =prev;
        return  reverse(cur,next);
    }
}

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

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

相关文章

构建Android studio版的CarSystemUI工程时因为包名一致导致BuildConfig问题

项目场景: 公司计划开发杰发AC8025-Android 12版本车载平台,前期预研需要构建Android studio版的CarSystemUI工程 问题描述 AAOS车载项目里面的CarSystemUI源码默认无Android studio版本,为了后期快速开发调试需要构建Android studio能直接…

python多线程与多进程开发实践及填坑记(1)

1. 需求分析 1.1. 概述 基于Flask、Pika、Multiprocessing、Thread搭建一个架构,完成多线程、多进程工作。具体需求如下: 并行计算任务:使用multiprocessing模块实现并行计算任务,提高计算效率、计算能力。消息侦听任务&#x…

大厂都在加急招人的大模型LLM,到底怎么学?

大模型如何入坑? 想要完全了解大模型,你首先要了解市面上的LLM大模型现状,学习Python语言、Prompt提示工程,然后深入理解Function Calling、RAG、LangChain 、Agents等 很多人不知道想要自学大模型,要按什么路线学&a…

电脑刚删除的文件怎么恢复?可使用这几种恢复方法!

在日常生活和工作中,我们时常会在电脑上进行各种文件操作,包括删除不需要的文件。然而,有时候我们可能会误删一些重要的文件,或者在删除后立刻意识到这些文件的重要性。 那么,电脑刚删除的东西怎么恢复呢?本…

神领物流项目第一天

文章目录 聚焦快递领域首先第一个是验证码模块流程登录接口权限管家 聚焦快递领域 首先第一个是验证码模块流程 首先生成验证码的流程 可以使用工具类去生成验证码 LineCaptcha lineCaptcha CaptchaUtil.createLineCaptcha(160, 60, 4, 26);// 获取值然后存入redis中 strin…

WEB04MyBatis

Mybatis mybatis查询 准备 准备工作 在目前的数据库中添加一张数据表emp 将资料中提供的day04-01-mybatis导入的目前的工程中 修改配置文件中的数据库的账户和密码 观察实体类中的属性和数据表中的字段的对应关系 查询结果封装 查询所有 SQL语句 select * from emp; …

基于Oauth2.0的OpenFeign远程调用

目录 前言 1.引入openfeign相关依赖 2.开启openFeign远程调用,在启动类头加上注解即可 3. 提供远程调用接口,接口名称必须与controler名称保持一致 4.远程调用关键代码 4.1 注入restTemplate 4.2 配置拦截器 4.3 设置请求头 4.4 获取请求结果 4.5 远…

两次叛国投敌,没有祸及子孙反而家族长盛不衰的传奇

这个人就是韩国国王韩王信,汉朝八大异姓王之一。 第一次叛国投敌,发生在楚汉争霸时期。有一次他的军队被项羽包围,于是选择了投降。不过,这是权宜之计,不久就借机回到刘邦阵营。 第二次叛国投敌,发生在西…

openssl交叉编译-移植ARM

OpenSSL是一个开源的密码学工具包,提供了一组用于网络安全的加密和解密算法、协议以及相关工具的库,它通过提供多种加密算法、协议和工具,为网络通信和数据存储提供了强大的安全保障。 主要功能 加密和解密: OpenSSL提供了多种对…

字节码编程javassist之结合hotswap在运行期动态修改方法返回值

写在前面 本文看下如何通过javassist结合hotswap在运行期动态修改方法的返回值。 1:代码 要修改的代码 public class ApiTest {public String m1(String info) {return "info is: " info;} }javasssit代码 package com.dahuyou.javassist.huohuo;im…

娱乐圈新瓜《庆余年》二皇子刘端端被曝“深夜秘事”

《庆余年》外,二皇子刘端端的“深夜冒险”网友笑称:权谋剧外更有戏话说《庆余年》里的二皇子李承泽, 那可是权谋与颜值并存的典范,但戏外的刘端端, 最近却成了“深夜冒险家”,让一众吃瓜群众笑中带惊&…

CNN文献综述

卷积神经网络(Convolutional Neural Networks,简称CNN)是深度学习领域中的一种重要模型,主要用于图像识别和计算机视觉任务。其设计灵感来自于生物学中视觉皮层的工作原理,能够高效地处理图像和语音等数据。 基本原理…

JVM专题之性能优化

运行时优化 方法内联 > 方法内联,是指 **JVM在运行时将调用次数达到一定阈值的方法调用替换为方法体本身** ,从而消除调用成本,并为接下来进一步的代码性能优化提供基础,是JVM的一个重要优化手段之一。 > > **注:** > > * **C++的inline属于编译后内联,…

特殊用途二极管+二极管故障检测+三极管(BJT)的工作原理+定时器的使用(小灯定时闪烁实现)

2024-7-5,星期五,17:27,天气:晴,心情:晴。今天没有什么特殊的事情发生,继续学习啦,加油加油!!! 今日完成模电自选教材第二章内容的学习&#xff…

Linux-C语言实现一个进度条小项目

如何在linux中用C语言写一个项目来实现进度条?(如下图所示) 我们知道\r是回车,\n是换行(且会刷新) 我们可以用 \r 将光标移回行首,重新打印一样格式的内容,覆盖旧的内容,…

二重积分 - 包括计算方法和可视化

二重积分 - 包括计算方法和可视化 flyfish 计算在矩形区域 R [ 0 , 1 ] [ 0 , 2 ] R [0, 1] \times [0, 2] R[0,1][0,2] 下,函数 z 8 x 6 y z 8x 6y z8x6y 的二重积分。这相当于计算曲面 z 8 x 6 y z 8x 6y z8x6y 与 xy 平面之间的体积。 二重积分…

网页计算器的实现

简介 该项目实现了一个功能完备、交互友好的网页计算器应用。只使用了 HTML、CSS 和 JavaScript ,用于检验web前端基础水平。 开发环境:Visual Studio Code开发工具:HTML5、CSS3、JavaScript实现效果 功能设计和模块划分 显示模块&#…

Chapter11让画面动起来——Shader入门精要学习笔记

Chapter11让画面动起来 一、Unity Shader中的内置变量(时间篇)二、纹理动画1.序列帧动画2.滚动背景 三、顶点动画1.流动的河流2.广告牌3.注意事项①批处理问题②阴影投射问题 一、Unity Shader中的内置变量(时间篇) Unity Shader…

Chiasmodon:一款针对域名安全的公开资源情报OSINT工具

关于Chiasmodon Chiasmodon是一款针对域名安全的公开资源情报OSINT工具,该工具可以帮助广大研究人员从各种来源收集目标域名的相关信息,并根据域名、Google Play应用程序、电子邮件地址、IP地址、组织和URL等信息进行有针对性的数据收集。 该工具可以提…

window系统openssl开发环境搭建(VS2017)

window系统openssl开发环境搭建 VS2017 一、下载openssl二、安装openssl三、openssl项目配置3.1 配置include文件3.2 配置openssl动态库四、编写openssl测试代码五、问题总结5.1 问题 一5.2 问题二一、下载openssl https://slproweb.com/products/Win32OpenSSL.html 根据自己…