【3】3道链表力扣题:删除链表中的节点、反转链表、判断一个链表是否有环

3道链表力扣题

  • 一、删除链表中的节点
    • 🌏 题目链接
    • 📕 示例
    • 🍀 分析
    • 💻 代码
  • 二、反转链表
    • 🌏 题目链接
    • 📕 示例
    • 🍀 分析
      • ① 递归
      • ② 迭代
  • 三、判断一个链表是否有环
    • 🌏 题目链接
    • 📕 示例
    • 🍀 分析
    • 💻 代码

一、删除链表中的节点

🌏 题目链接

【删除链表中的节点】https://leetcode.cn/problems/delete-node-in-a-linked-list/description/

📕 示例

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

🍀 分析

public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
        val = x;
    }
}

🖊 每一个节点就是一个 ListNode 对象
🖊 val 属性存储了具体的数据
🖊 next 属性存储了一个节点的内存地址

public class Solution {
    public void deleteNode(ListNode node) {

    }
}

🖊 deleteNode(ListNode node) 方法中,参数node是要被"删除"的节点
🖊 在该题中能够获得到的已知条件就只有这个要被删除的节点 node

🖊 已知: 要被删除的节点 node
🖊 根据已知可以得到: ① 要被删除的节点往后的所有节点 node.next.next...(这里就考虑它的下一个节点 node.next);② 可以得到节点的 valnode


在这里插入图片描述

🖊 这里的删除第三个节点,并不是把该节点从内存中移除,而是让第三个节点的值不再是【1】,而是它的下一个节点的值【9】。并且第三个节点的 next 存储它的下一个节点的 next

在这里插入图片描述

在这里插入图片描述

💻 代码

class Solution {
    public void deleteNode(ListNode node) {
        // 用被删除节点的下一个节点的值覆盖被删除节点的值
        node.val = node.next.val;
        // 被删除节点的next指向它下一个节点的next
        node.next = node.next.next;
    }
}

二、反转链表

🌏 题目链接

【206.反转链表】https://leetcode.cn/problems/reverse-linked-list/description/

📕 示例

在这里插入图片描述

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

在这里插入图片描述

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

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

🍀 分析

class Solution {
    public ListNode reverseList(ListNode head) {

    }
}

🖊 reverseList(ListNode head) 方法只有一个参数 head(头指针),它指向了头节点

① 递归

在这里插入图片描述

👆 如上图所示,假如 reverseList 方法编写成功的话,reverseList(head) 方法调用后,该链表的头指针会指向方法调用之前的尾节点(如上图的 newHead
👆 原本的 head = [5, 4, 3, 2, 1] 也变成了 head = [1, 2, 3, 4, 5]

在这里插入图片描述

🖊 假如 reverseList(head.next) 调用成功,则整个链表如上图所示


在这里插入图片描述
在这里插入图片描述


public class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) return head;

        // 递归
        ListNode newHead = reverseList(head.next);

        head.next.next = head;
        head.next = null;

        return newHead;
    }
}

② 迭代

在这里插入图片描述

🖊 已知条件就只有一个头指针 head,只能通过这个 head 进行反转


public class Solution {
    /**
     * 头插法(迭代)
     */
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) return head;

        ListNode newHead = null;
        do {
            ListNode tmp = head.next;
            head.next = newHead;
            newHead = head;
            head = tmp;
        } while (head != null);

        return newHead;
    }
}

三、判断一个链表是否有环

🌏 题目链接

141.判断一个链表是否有环:https://leetcode.cn/problems/linked-list-cycle/description/

📕 示例

在这里插入图片描述

在这里插入图片描述

🍀 分析

🖊 使用快慢指针思想完成
🖊 fast 指针每次 next 两步;slow 指针每次 next 一步。若有环的话,快慢指针必然相遇
🖊 如果 fast 指向 null 或 fast.next 指向 null,则链表没有环

在这里插入图片描述

💻 代码

public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head == null || head.next == null) return false;

        ListNode slow = head;
        ListNode fast = head.next;

        // 【fast == null || fast.next == null】都代表链表无环
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;

            if (slow == fast) return true;
        }

        return false;
    }
}

🍀 完整代码

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

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

相关文章

文件操作(顺序读写篇)

1. 顺序读写函数一览 函数名功能适用于fgetc字符输入函数所有输入流fputc字符输出函数所有输出流fgets文本行输入函数所有输入流fputs文本行输出函数所有输出流fscanf格式化输入函数所有输入流fprintf格式化输出函数所有输出流fread二进制输入文件fwrite二进制输出文件 上面说…

FPGA----ZCU106的petalinux 2019.1使用USB传输数据

1、实际项目中需要用到开发板的串口进行数据交互,之前讲的几节只是启动了网口(如下链接)。因此,本次给大家带来的官方自带串口例程的使用方法,本文的vivado工程和下述连接一样,PL端什么配置都没有。 FPGA-…

A Simple Problem with Integers(线段树)

目录 描述 输入 输出 样例输入 样例输出 思路 建树 第一次错误解法(正确解法在下面,可跳过这一步) 正确解法 code 描述 You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. One type of …

云架构(二) 大使模式

Ambassador pattern (https://learn.microsoft.com/en-us/azure/architecture/patterns/ambassador) 简单描述 创建一个助手服务,这个服务代表消费服务或者应用程序发送网络请求。大使服务可以看做是与客户机同一个位置的进程外代理。 这种…

如何快速掌握数字化运维方法,构建数字化运维体系?

⛳️ 写在前面参与规则!!! ✅参与方式:关注博主、点赞、收藏、评论,任意评论(每人最多评论三次) ⛳️本次送书1~4本【取决于阅读量,阅读量越多,送的越多】 主要内容读者…

简单实现企业微信远程打卡教程(永不迟到)

最近玩手游时刚好用到了手机模拟器,就是在电脑上安装一个手机模拟器,然后用电脑来挂机手机游戏 今天我突然有了一个想法,既然这个模拟器就是相当于一个虚拟的手机,那么是不是可以给它装上企业微信,然后让它帮我远程打卡…

vs_BuildTools.exe

Microsoft C Build Tools - Visual Studio vs_BuildTools.exe 安装无反应 无法进入安装界面。 转了一大圈: 最后决定更新系统,解决。 参考链接:执行了最后一步,更新系统: Fix: Faulting Application Path Error o…

详细了解RC4加密算法

一.什么是RC4加密算法 RC4加密算法是一种对称加密算法: 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对…

gpt-llm-trainer 出炉

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

如果有效的编写 ChatGPT 提示?

1. 明确目标:确定使用 ChatGPT 的目的。无论是创意写作、产生想法还是查找信息,知道你想要什么可以让你更有效地使用这个工具。 2. 具体说明:你的提示越具体,ChatGPT 就越能理解你的需求。例如,你可以要求 ChatGPT…

哔哩哔哩直播姬第三方obs推流使用教程

1 obs studio下载(官方下载较慢) 链接:https://pan.baidu.com/s/1fIKJkieYIta0gG-sX7Cr6g?pwdz7s9 提取码:z7s9 2 打开哔哩哔哩直播姬客户端并登录(pc版) 3 打开obs客户端进行推流(如果推流不成功,可能是驱动的问题,记得更新下驱动) 首先添加播放源 …

在同一个网站上自动下载多个子页面内容

一、问题现象 第一次遇到这样的问题,如下图: 即在同一个网站上下载多个内容时,第一个内容明明已经正常get到了,但开始第二个页面的查询 以后,原来已经查出的内容就找不到了。 二、解决办法 我不知道大家是不是遇到…

暴雨服务器X7740赋能大模型训练

数字经济浪潮愈演愈烈,大模型训练对服务器的要求也越来越高。在此背景下,暴雨信息发布专门为大规模模型训练而设计的全新旗舰GPU服务器—X7740,以卓越的计算性能、高速网络通信能力以及创新的能效表现,有效赋能大模型训练。 X7740 搭载了暴雨信息最新一代的英特尔至强可扩展处理…

基于springboot实现数据库的加解密

项目地址 https://github.com/Chenchicheng/spring-ibatis-encryption 功能说明 支持使用注解的方式目标类进行加解密支持同一个类多个字段分别使用不同的加密方式支持自定义加密方法 本地调试 pull代码到本地,更换application.yml中的数据库用户名和密码&…

ubuntu 安装 cloudcompare(两种方法)

方法一 :从 snap 安装 (推荐) 安装简单,基本上功能都有(读写保存las,pcd,标注等) 安装: sudo apt-get update sudo apt install snap sudo snap install cloudcompare…

【c++初阶】类与对象(中)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

Java知识点重点拓展

1.2 Java语言的特点 Java语言的广泛应用主要得益于它的核心特点,主要包括跨平台性、面向对象特性、安全性等。 特性描述跨平台性Java能够在多种操作系统上运行,这得益于JVM(Java虚拟机)。只要设备安装了对应的JVM,Jav…

【文献分享】通过形态扫描仪阐明自组装肽聚集:蛋白质-肽结构表征的新工具

题目:Elucidating Self‐Assembling Peptide Aggregation via Morphoscanner: A New Tool for Protein‐Peptide Structural Characterization 通过形态扫描仪阐明自组装肽聚集:蛋白质-肽结构表征的新工具 自组装和分子折叠在自然界中无处不在&#xff…

Java反序列化JDK动态代理的关系

Java代理模式 为什么要学习代理模式?了解开发原理,才能明白漏洞的产生。这不仅仅是SpringAOP的底层! [SpringAOP 和 SpringMVC] 代理模式的分类: 静态代理动态代理 静态代理 角色分析: 抽象角色:一般会…

MIPI RFFE接口

1. 概况 MIPI RFFE是一种专门针对当前及未来无线系统在射频(RF)前端控制界面规范。随着手机射频系统日趋复杂,业界需要一个单一控制界面解决方案。MIPI联盟的RF前端控制界面(RFFE)规范通过提供一个可连接到收发器或无线电的总线界面解决了这一难题,可用于…