闲暇之际敲敲代码,记录Leetcode刷题03

news2025/2/4 4:03:35

文章目录

  • 前言
  • 一、删除链表中的节点
    • 1.1 问题描述
    • 1.2 思路分析
  • 二、反转链表
    • 2.1 问题描述
    • 2.2 思路分析

前言

利用闲暇之际敲敲代码,提升编程技能及提高算法能力。

一、删除链表中的节点

1.1 问题描述

有一个单链表的 head,我们想删除它其中的一个节点 node。给你一个需要删除的节点 node 。你将无法访问第一个节点 head。链表的所有值都是唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。删除给定的节点注意:删除节点并不是指从内存中删除它,这里的意思是:

  • 给定节点的值不应该存在于链表中。
  • 链表中的节点数应该减少 1。
  • node 前面的所有值顺序相同。
  • node 后面的所有值顺序相同。
    自定义测试:
  • 对于输入,你应该提供整个链表 head 和要给出的节点 node。node 不应该是链表的最后一个节点,而应该是链表中的一个实际节点。
  • 我们将构建链表,并将节点传递给你的函数。
  • 输出将是调用你函数后的整个链表。
    示例1:
    在这里插入图片描述
输入:head = [4,5,1,9], node = 5
输出:[4,1,9]
解释:指定链表中值为5的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9

示例2:
在这里插入图片描述

输入:head = [4,5,1,9], node = 1
输出:[4,5,9]
解释:指定链表中值为1的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9

提示:

  • 链表中节点的数目范围是 [2, 1000]
  • -1000 <= Node.val <= 1000
  • 链表中每个节点的值都是唯一的
  • 需要删除的节点 node 是链表中的节点,且不是末尾节点

1.2 思路分析

1.2.1 这题题目的题解很巧妙,传统的思维认定我们是要真正的删除链表中的节点,但这题不是,而是利用了地址覆盖和改变链表引用方向。
1.2.2 代码实现

public class LT237_删除链表中的节点 {

    public class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }

    public void deleteNode(ListNode node) {
        //利用next属性,可以获取node下一个节点
        ListNode next = node.next;
        //node下一个节点数据赋值给当前节点
        node.val = next .val;
        //当前节点指向改变:指向next.next, 实际是把node的下一个节点删了
        node.next = next .next;
    }
}

二、反转链表

2.1 问题描述

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例1:
在这里插入图片描述

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例2:
在这里插入图片描述

输入:head = [1,2]
输出:[2,1]

示例3:

输入:head = []
输出:[]

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

2.2 思路分析

2.2.1 递归方法求解:调用 reverseList 方法,当传入 head 时,反转之后的链表应该如下图所示:
在这里插入图片描述
当传入 head.next 时,反转之后的链表应该如红色框图所示:
在这里插入图片描述
然后再改变 head 节点和 head.next 节点的 next 指向即可。

2.2.2 代码实现

public static  ListNode reverseList(ListNode head) {
    //如果为空链表或者只有一个节点的链表,则返回它本身
    if (head == null || head.next == null) {
        return head;
    }
    //反转head.next部分的链表
    ListNode newHead = reverseList(head.next);
    //head.next执向head原链表头
    head.next.next = head;
    //原链表头的next指向null
    head.next = null;
    //返回newHead反转之后的链表
    return newHead;
}

2.2.3 非递归方法求解:
在这里插入图片描述

2.2.4 代码实现

class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode newHead = null;
        while (head != null) {
            ListNode tmp = head.next;
            head.next = newHead;
            newHead = head;
            head = tmp;
        }
        return newHead;
    }
}

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

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

相关文章

Tensorflow基础入门超全总结

1.1 TensorFlow介绍 深度学习框架TensorFlow一经发布&#xff0c;就受到了广泛的关注&#xff0c;并在计算机视觉、音频处理、推荐系统和自然语言处理等场景下都被大面积推广使用&#xff0c;现在已发布2.3.0版本&#xff0c;接下来我们深入浅出的介绍Tensorflow的相关应用。 …

记录一个阿里云Android端文件上传的BUG

背景 Android移动端需要接入阿里云视频点播模块下的一个客户端上传的SDK。需要将移动端本地文件上传至阿里云服务器。 问题描述 调用方法及业务逻辑不赘述&#xff0c;贴张官方图&#xff0c;选择了上传地址和凭证的方法进行上传&#xff0c;并且是后台集成点播服务端SDK并调用…

关于哈希表

package com.javase.map.hashmap;import java.util.HashMap; import java.util.Map; import java.util.Set;/*** 关于HashMap&#xff1a;* 1.HashMap集合的底层是哈希表/散列表的数据结构。* 2.哈希表是数组和单向链表的结合体&#xff0c;充分发挥了它们各自的优点。…

【机器学习】三种主要集成学习思想简介

集成学习 集成学习通过训练多个分类器,然后将其组合起来,从而达到更好的预测性能,提高分类器的泛化能力。 目前集成学习有3个主要框架:bagging、boosting、stacking。 bagging套袋法 bagging是并行集成学习方法的最著名代表,其算法过程如下: 从原始样本集中抽取训练…

【云原生进阶之容器】第一章Docker核心技术1.8节——DockerFile解析

1 Dockfile详解 1.1 什么是Dockerfile 首先通过一张图来了解 Docker 镜像、容器和 Dockerfile 三者之间的关系。 通过上图可以看出使用 Dockerfile 定义镜像,运行镜像启动容器。 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文…

技术分享 | 黑盒测试方法论—场景法

场景法就是模拟用户操作软件时的场景&#xff0c;主要用于测试系统的业务流程。 测试不能只关注某个控件的边界值、等价类是否满足要求&#xff0c;也要关注它的主要功能和业务流程是否正确实现&#xff0c;这时就需要使用场景法来完成。 场景法 用例场景是用来描述流经用例路…

OpenHarmony 物联网设备开发环境搭建

前言 我们介绍的是华为官方推荐的 Windows + Ubuntu 混合开发的环境,使用Windows平台的DevEco Device Tool 进行可视化界面进行相关操作,通过远程连接的方式对接Ubuntu下的DevEco Device Tool,然后对Ubuntu下的源码进行开发、编译、烧录等操作。 目前官方不支持Mac系统,所…

【docker】什么是容器数据卷?

docker的理念回顾 将应用和环境打包成一个镜像&#xff01; 数据&#xff1f;如果数据都在容器中&#xff0c;那么我们容器删除&#xff0c;数据就会丢失&#xff01;需求&#xff1a;数据可以持久化 MySQL&#xff0c;容器删了&#xff0c;删库跑路&#xff01;需求&#x…

测试工具平台 MeterSphere 分享

一、官网地址 meterSphere 二、安装方式 Linux安装 默认账号密码&#xff1a; URL: http://$LOCAL_IP:8081用户名: admin初始密码: metersphere三、nginx配置 直接上配置 location / {proxy_pass http://localhost:8081;client_max_body_size 1000m;#access_log off;# 配…

SPDK代码结构浅析

最近这三周时间一直因为工作的需要在研究SPDK移植到RISCV平台上&#xff0c;在编译通过的时候&#xff0c;也顺带把SPDK的代码粗粗过了一遍&#xff0c;顺便做了一点笔记。 SPDK (Storage Performance Development Kit)其实就是在用户空间&#xff0c;采用轮询的方式无锁的NVM…

通达信下单接口获取指数成份股的步骤分享

通达信下单接口获取指数成份股的步骤分享&#xff1a; ContextInfo.get_sector() 接口&#xff1a;https://gitee.com/metatradeapi 用法&#xff1a; ContextInfo.get_sector(sector, realtime) 释义&#xff1a; 获取板块成份股&#xff0c;只支持取指数成份股 参数&…

DOM学习笔记(坚持~~~~)

1.DOM简介 1.1什么是DOM 文档对象模型简称DOM&#xff0c;W3C组织推荐的处理可扩展标记语言的标准编程接口&#xff0c;通过这些DOM接口可以改变网页的内容&#xff0c;结构和样式。 1.2 DOM树 文档&#xff1a;一个页面就是一个文档&#xff0c;DOM中使用document表示 元素&…

Python+Qt身体特征识别人数统计源码窗体程序

程序示例精选 PythonQt身体特征识别人数统计 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《PPythonQt身体特征识别人数统计》编写代码&#xff0c;功能包括了相片&#xff0c;摄像头身体识别…

Javaweb中的Request(请求)和Response(响应)

目录 一、概念 二、请求&#xff08;Request&#xff09; 1.例子简介 2.Request继承体系 3.Request获取请求数据 &#xff08;1&#xff09;请求行 &#xff08;2&#xff09;请求头 &#xff08;3&#xff09;请求体 4.优化请求体参数的获取 5.解决请求参数乱码问…

POSIX Timer

一、特点&#xff1a; 1、使用 POSIX Timer&#xff0c;一个进程可以创建任意多个 Timer。 2、setitmer 计时器时间到达时&#xff0c;可以有多种通知方式&#xff0c;比如信号&#xff0c;或者启动线程。 3、POSIX Timer 则可以使用实时信号。 4、POSIX Timer 是针对有实时要…

leetcode98. 验证二叉搜索树关于递归实现中遇到的global和nonlocal(各种报错分析)

leetcode98. 验证二叉搜索树 题目 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二…

前端基础(十三)_定位position、定位层级z-index

一、定位position Css的定位机制&#xff1a;普通文档流、浮动、定位 这里主要介绍CSS的定位属性&#xff1a;position&#xff1a; 1、定位原理&#xff1a;允许元素相对于正常位置、或者相对于父元素、浏览器窗口本上的位置 2、元素位置的调整&#xff1a; left|right属性、…

Spring Boot项目使用RabbitMQ队列

Spring Boot项目使用RabbitMQ队列 一、Rabbitmq的安装 RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写&#xff0c;**即需要先安装部署Erlang环境再安装RabbitMQ环境。 erlang的安装在windows中直接点击安装即可。 安装完erlang后设置erlang的环境变量ERLANG…

CSM32RV20 是 32位低功耗MCU芯片 RISC-V RV32IMAC 内核

CSM32RV20 是 32位低功耗MCU芯片 RISC-V RV32IMAC 内核 CSM32RV20 是基于RISC-V RV32IMAC 内核&#xff08;2.6 CoreMark/MHz&#xff09;的32位低功耗MCU芯片&#xff0c;最高主频32MHz&#xff0c;最大支持 40KB 嵌入式FlASH、4KB SRAM和512B NVM&#xff0c;集成ADC和UART、…

如何使用FastReport .NET 从 JetBrains Rider 中创建PDF报告?

Fastreport是目前世界上主流的图表控件&#xff0c;具有超高性价比&#xff0c;以更具成本优势的价格&#xff0c;便能提供功能齐全的报表解决方案&#xff0c;连续三年蝉联全球文档创建组件和库的“ Top 50 Publishers”奖。 FastReport.NET官方版下载&#xff08;qun&#x…