我在代码随想录|写代码之203. 移除链表元素,707. 设计链表,206. 反转链表

news2024/11/17 11:22:01

​第一题 ​​ 203. 移除链表元素

题目:

leetcode

思路分析:

我们要删除节点说白了就是将节点移除,将要删除的节点的前一个的next域移动到要删除节点的next域,我们可以这样写当我们运到我们要删除节点然后件他删除,那么怎么删除?我们可以直接让我们要删除的元素找不到。如果我们直接将我们要删除的节点删除那么我们就找不到我们的要删除节点的下一个节点所以我们要将我们的节点进行平移操作,我们平移肯定要早到我们要删除节点的上一个节点,而我们的链表是单向的所以我们不可能回到上一个节点所以我们定义的指针要指向上一个节点,所以我们要通过cur->next去确定我们要删除的节点,这个就是我们的思路。

一刷

在这里插入图片描述

一刷用了块的方法我们不断移动头节点当发现我们的头结点的下一位为我们我删除的值的时候循环将头结点更新,为什么要将头结点的删除和其他结点区分开来,因为我们的头结点可能为空,而尾结点的next域为空所以要将俩端区分。在头节点判断中我们将头结点使用一个指针去操作这样可以让保证我们的头结点始终是我们链表的头部,我们的头结点等于我们头结点的下一个值,也就是说当我们头节点尾我们要删除的值的时候我们要将头节点向后移动然后删除我们的p指针指向的上一个头节点的值为什么是这样因为我们的头节点已经更新了。else后面确定的是尾节点我们可以通过相同的方法去解决因为没有说明区别,然后就是我们对不是俩段节点的处理了,正常的节点移除操作,最后我们返回的我们的头节点

代码

代码解析

上面的代码我们使用了虚拟头节点,在头节点的前面添加我们的虚拟头结点,用一个指针去操作然后用虚拟头结点固定我们要返回的结点,当我们的指针的下一位不为空我们就不断循环我们指针指向下一个的值等于cur我们就对下一个元数进行删除将中间结点删除

第二题 206. 反转链表

题目:

题目

题目分析:

我们要进行链表的反转我们要用上双指针,其实这个可以说是对双指针的考核,无论是之前的滑动窗口还是KMP都是对指针的考核,我们要对双指针确定的区间进行判断,区间的范围要掌握,第一章的数组本质是对双指针和区间范围的考核,我们要定义区间的范围去使用同一遍历规则去进行循环要不然可能回出现各种问题。

这个是双指针版本代码:
​​​​
代码
上面的注释希望大家思考下然后写出递归版本代码

下面我给出递归版本代码:

在这里插入图片描述
大家可以常考一下好了下面就将来今天的重点了!!!

第三题 707. 设计链表,

题目:

是真的简单就是实现复杂

在这里插入图片描述

思路分析:

我也不废话了直接放代码

class MyLinkedList {
public:
    //初始化链表
    MyLinkedList() {
        this->size = 0;
        this->head=new ListNode(0);//这个是虚拟结点
    }
    //获取到第index个结点数值,如果index是非法的数值直接返回-1,注意index是从0开始
    int get(int index) {
        if(index<0||index>=size){//判断下标是否合法如果不合法返回-1
            return -1;//什么是合法就是判断的取的值是否在区间内
        }
        ListNode*cur = head;//头结点
        for(int i=0;i<=index;i++){//不断循环到index的结点
            cur = cur->next;
        }
        return cur->val;//返回index下面的值
    }
    
    void addAtHead(int val) {
        addAtIndex(0,val);//既然都是增加结点那么调用我们增加结点的函数就可以
    }
    
    void addAtTail(int val) {
        addAtIndex(size,val);//同理
    }
    //增加结点
    //如果index个节点之前插入新节点,那么新插入的节点为链表的新头节点
    //如果index等于链表的长度,则说明是新插入的节点为链表的尾结点
     //如果index大于链表的长度,则返回为空
    void addAtIndex(int index, int val) {
        if(index>size){//如果索引值越界那么我们直接返回空即可
            return ;
        }
        index = max(0,index); //我们的下标在取最大值防止我们的大小是负数,我们索引也是负数的情况
        size++;//因为我们要增加一个结点所以我们就要将我们的长度加1
        ListNode*pred = head;//创建一个一个指针去移动
        for(int i=0;i<index;i++){
            pred = pred->next;//移动到当前我们索引的位置的前一位
        }
        ListNode*toAdd = new ListNode(val);//然后我们又创建了一个结点去将这给结点增加到我们的要增加的位置
        toAdd->next = pred->next;//我们这个新结点的指针指向下一位是我们当前要插入结点位置的指针指向下一位,
        pred->next = toAdd;//然后将我们索引的位置的前一位指向我们的插入结点
    }
    
    void deleteAtIndex(int index) {//删除结点
        if(index<0||index>=size){
            return ;
        }
        size--;//因为我们删除了元素所以我们的长度要减
        ListNode*pred = head;//我们创建指针去指向我们的结点
        for(int i=0;i<index;i++){//不断将我的结点移动到我们要删除元素的下一位然后退出循环
            pred = pred->next;
        }
        ListNode*p=pred->next;//这个p指向的就是我们要删除的结点
        pred->next = pred->next->next;//我们将结点的指向修改然后删除p指向的结点即可
        delete p;
    }
    private://定义一个私有属性
        int size;
        ListNode*head;
};

这个可不盖的代码比较复杂都是对链表的基础操作,反正我是要背的
下面我给出c语言版本代码供大家参考:

class MyLinkedList {
public:
    MyLinkedList() {
        this->size = 0;
        this->head=new ListNode(0);
    }
    
    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;
    }
    
    void addAtHead(int val) {
        addAtIndex(0,val);
    }
    
    void addAtTail(int val) {
        addAtIndex(size,val);
    }
    
    void addAtIndex(int index, int val) {
        if(index>size){
            return ;
        }
        index = max(0,index);
        size++;
        ListNode*pred = head;
        for(int i=0;i<index;i++){
            pred = pred->next;
        }
        ListNode*toAdd = new ListNode(val);
        toAdd->next = pred->next;
        pred->next = toAdd;
    }
    
    void deleteAtIndex(int index) {
        if(index<0||index>=size){
            return ;
        }
        size--;
        ListNode*pred = head;
        for(int i=0;i<index;i++){
            pred = pred->next;
        }
        ListNode*p=pred->next;
        pred->next = pred->next->next;
        delete p;
    }
    private:
        int size;
        ListNode*head;
};

好了如果有什么不懂的在评论区留言,会解答的。
今天的分享到这里,如果喜欢这篇文章可以点个赞关注持续更新中…

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

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

相关文章

如何在Centos 7环境下安装MySQL并登录

目录 先获取MySQL官方yum源 然后正常使用yum命令下载mysql即可完成MySQL的下载 使用mysql客户端登录mysqld服务端 能够登录mysql客户端后&#xff0c;我们最后还需要做一点配置 先获取MySQL官方yum源&#xff08;包括对yum源的介绍&#xff09; 介绍一下yum源 yum源就是一…

k8s如何部署seata(分布式事务)?(第一篇)

k8s如何部署seata(分布式事务)&#xff1f; 官方传送门https://seata.io/zh-cn/ 快速入门SEATA Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站…

RMQ算法总结

知识概览 RMQ又叫ST表、跳表&#xff0c;可以用来解决区间最值问题&#xff0c;这里这有查询没有修改。当然&#xff0c;这样的问题用线段树也是可以解决的。RMQ算法本质上是倍增动态规划&#xff0c;它的思想是先倍增预处理再查询。f(i, j)表示从i开始&#xff0c;长度是的区…

TableAgent:让数据分析变得轻松简单,导师再也不用担心我的数据分析能力啦!

TableAgent——导师再也不用担心我的数据分析能力啦 1. TableAgent介绍1.1 TableAgent——数据分析智能体1.2 背后强大的技术支持 2. TableAgent注册3. TableAgent使用3.1 入门级使用3.2 魔鬼级使用 4. 对比使用5. 总结 1. TableAgent介绍 1.1 TableAgent——数据分析智能体 …

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

PostgreSQL向量数据插件--pgvector安装 一、版本二、数据库安装1. 在官网下载PostgreSQL14.0的安装包2.增加用户postgres3.解压安装 三、pgvector安装1. 从github上克隆下来2. 安装pgvector插件3. 开始使用pgvector启用pgsql命令行创建扩展 本文为本人在安装pgvector中踩过的坑…

Postgresql在Windows中使用pg_dump实现数据库(指定表)的导出与导入

场景 Windows中通过bat定时执行命令和mysqldump实现数据库备份&#xff1a; Windows中通过bat定时执行命令和mysqldump实现数据库备份_mysqldump bat-CSDN博客 Windows上通过bat实现不同数据库之间同步部分表的部分字段数据&#xff1a; Windows上通过bat实现不同数据库之间…

Java EE 多线程之线程安全的集合类

文章目录 1. 多线程环境使用 ArrayList1. 1 Collections.synchronizedList(new ArrayList)1.2 CopyOnWriteArrayList 2. 多线程环境使用队列2.1 ArrayBlockingQueue2.2 LinkedBlockingQueue2.3 PriorityBlockingQueue2.4 TransferQueue 3. 多线程环境使用哈希表3.1 Hashtable3.…

Spring深入学习

1 Bean创建的生命周期 Spring bean是Spring运行时管理的对象。Spring Bean的生命周期指的是Bean从创建到初始化再到销毁的过程&#xff0c;这个过程由IOC容器管理。 IOC即控制反转&#xff0c;是面向对象编程中的一种设计原则&#xff0c;通过依赖注入&#xff08;DI&#xf…

TrustZone之中断及中断处理

一、中断 接下来,我们将查看系统中的中断,如下图所示: 通用中断控制器(GIC)支持TrustZone。每个中断源,在GIC规范中称为INTID,分配到以下三个组之一: • Group0:安全中断,以FIQ方式发出信号 • 安全Group1:安全中断,以IRQ或FIQ方式发出信号 • 非安全Gr…

SuperMap iManager 11i(2023) SP1新特性汇总

作者&#xff1a;ls 【目录】 &#xff08;一&#xff09;GIS云套件支持发布聚合服务&#xff08;二&#xff09;GIS云套件支持自定义/修改服务接口信息&#xff08;三&#xff09;GIS云套件管理界面支持批量修改镜像&#xff08;四&#xff09;GIS云套件管理界面可调整服务节点…

iA Writer for Mac:释放创作力的专业MarkDown写作软件

iA Writer for Mac是一款专业的MarkDown写作软件&#xff0c;为Mac用户提供了简洁、高效的写作环境。无论您是一名专业写作人员、学生或博主&#xff0c;iA Writer都能帮助您以最简单的方式将想法转化为文字。 首先&#xff0c;iA Writer的界面非常简洁&#xff0c;只展示您正…

MATLAB 系统辨识 + PID 自动调参

MATLAB 系统辨识 PID 自动调参 Matlab R2021b下载安装详细教程Chapter1 MATLAB 系统辨识 PID 自动调参1. 导入数据2. 系统辨识3. PID 自动调参 Chapter2 MATLAB系统辨识Chapter3 【MATLAB】使用系统辨识工具箱(System Identification)建模Chapter4 matlab系统辨识工具箱及其反…

网络服务IP属地发生变化的原因有哪些?

近期&#xff0c;许多用户发现自己的网络服务IP属地发生了变化。原本固定的IP地址不再是静态的&#xff0c;而是发生了变动。这一现象引起了广大用户的关注和疑惑&#xff0c;对网络服务的使用和信息安全产生了影响。为了解决用户的疑虑&#xff0c;我们对此现象进行了深入探究…

云仓酒庄带您品法国葡萄酒

说起葡萄酒肯定绕不开法国&#xff0c;法国葡萄酒闻名中外&#xff0c;口碑卓越。作为世界上的产酒大国&#xff0c;可以说是每一寸土地都可以种植葡萄。云仓酒庄的品牌雷盛红酒分享这么优秀的一个葡萄酒产酒国有哪些特点呢&#xff1f; 1.产区特色&#xff1a;波国有最著名的…

js输入框部分内容不可编辑,其余正常输入,el-input和el-select输入框和多个下拉框联动后的内容不可修改

<tr>//格式// required自定义指令<e-td :required"!read" label><span>地区&#xff1a;</span></e-td><td>//v-if"!read && this.data.nationCode 148"显示逻辑<divclass"table-cell-flex"sty…

百华鞋业入围全国老年用品标准编制参编单位

12月8日&#xff0c;中国轻工业信息中心组织召开了中国轻工业适老系列标准研讨会。中国轻工业联合会信息统计部&#xff08;中国轻工业信息中心&#xff09;副主任马真出席会议并讲话。中国轻工业信息中心标准工作负责人孟慧敏介绍了相关标准制定情况。会议由中国轻工业信息中心…

Cellinx NVT 摄像机 GetFileContent.cgi任意文件读取漏洞 (CVE-2023-23063)

0x01 产品简介 Cellinx NVT IP PTZ是韩国Cellinx公司的一个摄像机设备。 0x02 漏洞概述 Cellinx NVT v1.0.6.002b版本存在安全漏洞&#xff0c;该漏洞源于存在本地文件泄露漏洞&#xff0c;攻击者可读取系统密码等敏感信息。 0x03 复现环境 FOFA&#xff1a;body"loc…

LAMP平台——构建PHP运行环境

在构建LAMP平台时&#xff0c;各组件的安装顺序依次为Linux、Apache、MySQL、PHP。其中Apache和 MySQL的安装并没有严格的顺序&#xff1b;而PHP环境的安装一般放到最后&#xff0c;负责沟通Web服务器和数据库 系统以协同工作。 PHP 即 Hypertext Preprocessor&#xff08;超级…

连续型随机变量的概率密度

如果对于随机变量的分布函数&#xff0c;存在非负可积函数&#xff0c;使得对于任意实数&#xff0c;有&#xff1a; 那么就称为连续型随机变量&#xff0c;称为的概率密度函数&#xff0c;简称密度函数。

Spring 6(一)【Spring 入门】

前言 好久没有写博客了&#xff0c;最近刚忙完考试&#xff0c;眼下又是英语四六级。Flink 按说应该是大数据学习的主线任务&#xff0c;但是长时间学一门技术还是心累的。正好之前对 Java 注解有了进一步的熟悉&#xff0c;一直想着熟悉巩固。所以&#xff0c;今天开始就来深入…