leetcode每日一题:链表专题篇第一期(1/2)

news2025/1/15 6:33:00

请添加图片描述

😚一个不甘平凡的普通人,日更算法学习和打卡,期待您的关注和认可,陪您一起学习打卡!!!😘😘😘
🤗专栏:每日算法学习
💬个人主页:个人主页

算法分类:链表篇
语言:java
题目来源:力扣
预期学习时间:两天
前言:我知道很难,但是今天多付出一点,明天就更轻松一些!!!加油🦅🦅🦅

往期栏目:
👉数组学习第一期🎯
👉数组学习第二期🎯

文章目录

  • 链表专题
    • 什么是链表?
    • 怎样去写?
    • 力扣题目专练
      • 203. 移除链表元素
        • 思路:
        • 示例代码
      • 206. 反转链表
        • 思路:
        • 示例代码`

链表专题

什么是链表?

链表是通过指针串联在一起的线性结构,每一个节点由两部分组成,一个数数据域,一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null,空值。

分类:单链表,双链表,循环链表
单链表:
在这里插入图片描述
双链表:
在这里插入图片描述
循环链表:
在这里插入图片描述
时间复杂度:
链表的长度可以是不固定的,可以动态增删,适合数量不固定,频繁增删,较少查询的场景。在插入删除是时间复杂度是O(1),在查询时是O(n)

怎样去写?

代码实现:

class ListNode{
    int val; //结点的值
    ListNode next; // 下一个结点
    public ListNode(){} //无参构造函数
    public ListNode(int val){ //节点构造函数
        this.val = val;
    }
    //节点的构造函数
    public ListNode(int val,ListNode next){
        this.val = val;
        this.next = next;
    }
}

链表操作的两种方式:
1.直接使用原来的链表进行操作
例如:在进行移除节点操作的时候,因为结点的移除都是通过前一个节点来进行移除的,那么我们应该怎么移除头结点呢,只需要将head头结点向后移动一格即可。
在这里插入图片描述
在这里插入图片描述

2.设置一个虚拟头结点进行操作
为了逻辑统一去移除节点,可以在head之前设置一个虚拟头结点,这样每个节点都可以通过相同的处理方式去移除了。
在这里插入图片描述

下面我们通过几个习题来进行练习和巩固基础吧!!!699

力扣题目专练

203. 移除链表元素

原题链接

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

示例 1:

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

示例 2:

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

示例3:

输入:head = [7,7,7,7], val = 7
输出:[]

提示:

列表中的节点数目在范围 [0, 104] 内
1 <= Node.val <= 50
0 <= val <= 50

思路:

我们使用带虚拟头,即上面的第二种方式来进行移除元素。思路很简单,可以参考一下代码:多敲几遍,增加熟练度

示例代码

/**
 * 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 removeElements(ListNode head, int val) {
        if(head == null){
            return head;
        }
        ListNode dummy = new ListNode(-1,head);
        ListNode pre = dummy;
        ListNode cur = head;
        while(cur != null){
            if(cur.val == val){
                pre.next = cur.next;
            }else{
                pre= cur;
            }
            cur= cur.next;
        }
        return dummy.next;
    }
}

206. 反转链表

原题链接

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

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

示例 2:

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

示例3:

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

提示:

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

思路:

如何将链表指向反过来,只需要将该节点的下一个指向该节点前一个节点即可,此时我们仍使用虚拟头结点,用一个while循环,当当前节点是空的时候,返回该节点前一个节点即可。原来的尾结点成了翻转后的头节点,所以可以正常打印出链表。

示例代码`

/**
 * 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 reverseList(ListNode head) {
        ListNode pre= null;
        ListNode cur= head;
        ListNode temp = null;
        while(cur!= null){
            temp = cur.next;
            cur.next= pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
}

这两个题是最基础的链表入门题,相关的题目还有很多,建议多写几遍去理解一下实现过程和写法。
请添加图片描述

我是不想摆烂的 今天也要向佬学习码字不易,感谢您的阅读,希望对您有所帮助。关注我,完成每日算法自律打卡,学习什么时候开始都不晚!!

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

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

相关文章

现在备考2023年5月软考网络工程师时间够吗?

距离2023年5月软考还有1个多月的时间&#xff0c;备考网络工程师的时间是够的&#xff0c;以下是一些备考方法&#xff1a; 1.了解考试内容 在你开始学习考试之前&#xff0c;了解考试的形式和内容是很重要的。这将帮助你把注意力集中在最有可能被测试的领域。你应该复习考试…

Gartner Magic Quadrant for SD-WAN 2022 (Gartner 魔力象限:软件定义广域网 2022)

Gartner 魔力象限&#xff1a;SD-WAN 2022 请访问原文链接&#xff1a;https://sysin.org/blog/gartner-magic-quadrant-sd-wan-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Gartner 魔力象限&#xff1a;SD-WAN 2022…

ChatGPT最强竞争对手,无需魔法,直接使用

无需科学上网&#xff0c;无需加入Waitlist&#xff0c;免费使用&#xff0c;没有高峰限制&#xff0c;而且效果媲美ChatGPT&#xff01; ChatGPT 的最强竞争对手Claude!!! Claude 是由Anthropic这家人工智能公司开发出来的&#xff0c;其联合创始人Dario Amodei曾经担任OpenAI…

K8S使用持久化卷存储到NFS(NAS盘)

参考文章&#xff1a;K8S-v1.20中使用PVC持久卷 - 知乎 Persistent Volumes&#xff1a;PV是持久化卷&#xff0c;系统管理员设置的存储&#xff0c;它是群集的一部分&#xff0c;是一种资源&#xff0c;所以它有独立于Pod的生命周期 Persistent Volume Claim&#xff1a;PVC…

抽象同步队列AbstractQueuedSynchronizer(AQS)简要理解

抽象同步队列AbstractQueuedSynchronizer AQS 简要理解 1 什么是AQS2 AQS结构2.1 同步状态2.2 CLH队列2.3 Node 3 AQS流程 https://zhuanlan.zhihu.com/p/370501087 1 什么是AQS AQS&#xff08;AbstractQueuedSynchronizer&#xff09;是 Java 中实现锁和同步器的基础设施&am…

el-input-number中添加单位(css版)

优点: 通过css添加,非常便捷和简单 例如此处,需要添加一个分钟单位 <el-input-number class"input-number" v-model"value" :step"5" :min"30" ></el-input-number> //css <style lang"scss"> .input-nu…

node项目(一) koa脚手架的搭建

一、koa 安装 // 安装koa npm install -g koa-generator // 创建项目 koa2 项目名称 当出现这个框的时候安装完毕 之后就是进入目录文件&#xff0c;根据package.json执行即可 二、出现问题 汇总 问题一&#xff1a;koa-generator安装失败 没有出现koa-generator安装成功 …

分类预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多输入分类预测

分类预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多输入分类预测 目录 分类预测 | MATLAB实现BO-CNN-GRU贝叶斯优化卷积门控循环单元多输入分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 基于贝叶斯(bayes)优化卷积神经网络-门控循环单元(CN…

4月第2周榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年4月10日-4月16日飞瓜数据UP主排行榜&#xff08;B站平台&#xff09;&#xff0c;通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况&#xff0c;为用户提供B站号综合价值的数据参考&#xff0c;根据UP主成长情况用户能够快速找到运营能力强的B…

Linux进程概念——其一

目录 冯诺依曼体系结构 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程标示符 通…

Docker Desktop 占用过多C盘存储空间的一种解决办法——在其他磁盘分区添加访问路径

一、问题背景 Docker Desktop默认是安装到C盘中的。但随着Docker的使用&#xff0c;其占用的空间也越来越大&#xff0c;Docker占用C盘空间过大成了个令人头疼的问题。恰好最近腾出了一个空的磁盘分区&#xff0c;因此可以使用“在其他磁盘分区添加访问路径”的方式&#xff0c…

03-Mybatis的基本使用-注解配置文件+xml配置文件

目录 1、环境准备 2、注解配置文件 基础操作01-通过ID删除数据 基础操作02-插入数据 基础操作03-更新数据 基础操作04-根据ID查询数据 基础操作05-条件查询数据 3、xml配置文件 1、环境准备 1. 创建数据库数据表 -- 部门管理 create table dept(id int unsigned prim…

【数据篇】SpringBoot 整合 MyBatis 组合 Redis 作为数据源缓存

写在最前 MyBatis 是常见的 Java 数据库访问层框架。在日常工作中&#xff0c;开发人员多数情况下是使用 MyBatis 的默认缓存配置&#xff0c;但是 MyBatis 缓存机制有一些不足之处&#xff0c;在使用中容易引起脏数据&#xff0c;形成一些潜在的隐患。 本文介绍的是 Redis 组…

版本控制工具之git安装

作为软件开发者的必备工具——版本控制工具&#xff0c;git无疑深受欢迎。 业界常用的版本控制工具主要有两种&#xff1a;SVN和Git SVN 传统的版本控制工具&#xff0c;特点为集中式分布。 使用一台专用的服务器存储所有资料。 缺点是所有的动作都必须依赖于中央服务器&#x…

FPGA配置方式的基本知识?

FPGA配置粗略可以分为主动和被动两种。主动加载是指由FPGA控制配置流程&#xff0c;被动加载是指FPGA仅仅被动接收配置数据。 最常见的被动配置模式就是JTAG下载bit文件。此模式下&#xff0c;主动发起操作的设备是计算机&#xff0c;数据通路是JTAG&#xff0c;FPGA会被动接收…

STM32F103基于HAL库I2C/SPI硬件接口+DMA驱动 SSD1306 Oled

STM32F103基于HAL库I2C/SPI硬件接口DMA驱动 SSD1306 Oled ✨由于手上只有I2C接口的SSD1306 OLED屏幕&#xff0c;仅测试了硬件I2C驱动显示功能&#xff0c;实际测试的FPS帧率在37或38变化。 &#x1f4e2;本项目从Github开源项目中移植过来&#xff0c;开源地址&#xff1a;htt…

JDBC之API详解

DriverManager可以注册驱动&#xff0c;就是创建接口的实现类对象。 Class.forName可以将Driver类加载进内存&#xff0c;Driver类中存在静态代码块&#xff0c;随着类的加载静态代码块执行&#xff0c;通过 DriverManager.registerDriver的方式注册好驱动。 获取与数据库的链…

Android Java 播放音频 AudioTrack

【很多同学读 Android 系统的源码时感觉比较费力&#xff0c;一定会觉得是自己水平不够见识有限认知水平不足&#xff0c;觉得自己需要多学习多努力多下功夫&#xff0c;但 Android 系统源码质量之烂简直超乎想象。尽管 Android 系统确实实现了很多功能、特性&#xff0c;提供了…

【面试】你在项目中遇到过慢查询问题吗?你是怎么做SQL优化的?

文章目录 前言一、找出有问题的SQL1、系统层面2、SQL语句层面 二、查看SQL执行计划三、SQL优化案例慢查询优化步骤 SQL优化小结 前言 我在面试的时候很喜欢问候选人这样一个问题&#xff1a;“你在项目中遇到过慢查询问题吗&#xff1f;你是怎么做SQL优化的&#xff1f;” 很多…

含分布式电源的配电网可靠性评估研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…