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

​第一题 ​​ 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;
};

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

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

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

相关文章

JdbcTemplate query系列方法指定jdbcType类型

使用SqlParameterValue类包装一下就行了&#xff0c;只要创建一个SqlParameterValue对象&#xff0c;通过构造函数把jdbcType类型&#xff08;用的是Types中的常量&#xff09;和值传入 例如&#xff1a; // 这两个包下面的 import org.springframework.jdbc.core.SqlParamete…

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

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

nodejs+vue+微信小程序+python+PHP邮件分类系统的设计与实现-计算机毕业设计推荐

方便安装&#xff0c;减少了维护的工作量&#xff0c;只需要通过服务器端的更新就可以实现新系统的发布&#xff0c;提高了邮件分类系统的可扩展性和可移植性。 E-mail是信息化时代最重要的联系工具之一&#xff0c;在日常的工作学习中具有非常重要作用。电子邮件作为互联网技术…

Vue3-19-组件-定义和基本使用

组件的定义 个人理解 &#xff1a;1、组件&#xff0c;就是我们把某个功能模块进行封装&#xff0c;在使用时直接引入进行使用&#xff0c;极大的提高了代码的可复用性。2、在vue 中&#xff0c;一个 [.vue] 文件&#xff0c;就是一个组件。3、组件之间存在【引入】 与 【被引…

什么是供应链安全及其工作原理?

6000公里长的丝绸之路将丝绸、谷物和其他货物从中国运送到帕尔米拉。尽管蒙古治下的和平保护丝绸之路免受海盗、强盗和内部盗窃的侵害&#xff0c;但商人仍然装备精良&#xff0c;并依赖于大型商队旅行和战略性放置的小型堡垒所提供的安全。 为什么供应链安全很重要&#xff1…

智安网络|企业网络安全工具对比:云桌面与堡垒机,哪个更适合您的需求

随着云计算技术的快速发展&#xff0c;越来越多的企业开始采用云计算解决方案来提高效率和灵活性。在云计算环境下&#xff0c;云桌面和堡垒机被广泛应用于企业网络安全和办公环境中。尽管它们都有助于提升企业的安全和效率&#xff0c;但云桌面和堡垒机在功能和应用方面存在着…

智能优化算法应用:基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于秃鹰算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.秃鹰算法4.实验参数设定5.算法结果6.参考文献7.MA…

实战指南:使用 Nginx 反向代理实现多端口跳转

目录 前言1 实现的效果2 准备两个tomcat服务2.1 启动8080端口的tomcat服务2.2 启动8081端口的tomcat服务 3 Nginx 配置3.1 配置内容3.2 配置说明3.3 location符号的含义和作用 4 开放防火墙端口5 测试与验证结语 前言 在现代 Web 开发中&#xff0c;Nginx作为一款高性能的开源…

FL Studio 21.2.2.3914破解补丁含FL Studio2024 Crack文件及怎么激活FL Studio

FL Studio 21.2.2.3914中文破解版国人习惯称水果编曲, 是一个完整的电音软件音乐制作环境或数字音频工作站。是现在流行的数字音频工作站之一,包括撰写,整理,记录,编辑,电音,混音和掌握专业品质的音乐。 FL Studio 21.2.2.3914 (Windows)原版安装程序破解补丁 软件全名&#x…

索引与优化原理(上)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上一篇&#xff0c;我们…

ToolLLM model 以及LangChain AutoGPT Xagent在调用外部工具Tools的表现对比浅析

文章主要谈及主流ToolLLM 以及高口碑Agent 在调用Tools上的一些对比&#xff0c;框架先上&#xff0c;内容会不断丰富与更新。 第一部分&#xff0c;ToolLLM model 先来说主打Function Call 的大模型们 OpenAI GPT 宇宙第一LLM&#xff0c;它的functionCall都知道&#xff0…

nrm 的使用 可以快速切换下载(npm)镜像,解决资源下载慢和运行失败

nrm是什么&#xff1f; 介绍 nrm(npm registry manager) 是 npm 的镜像源管理工具. 有时候国外资源太慢,使用 nrm 可以快速的在 npm 源之间切换 安装 npm install -g nrm 基本使用 查看可选择的源 nrm ls 切换到对应的镜像源 nrm use 对应的镜像 删除镜像源 nrm del 名字 …

数据挖掘目标(客户价值分析)

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as snsIn [2]: datapd.read_csv(r../教师文件/air_data.csv)In [3]: data.head()Out[3]: Start_timeEnd_timeFareCityAgeFlight_countAvg_discountFlight_mileage02011/08/182014/0…

网络入门---守护进程

目录标题 什么是守护进程会话的理解setsid函数daemonSelf函数模拟实现测试 什么是守护进程 在前面的学习过程中我们知道了如何使用TCP协议和UDP协议来实现通信&#xff0c;比如说登录xshell运行了服务端&#xff1a; 然后再登录一个xshell运行客户端并向服务端发送信息&#…

笔记本电脑如何安装openwrt

环境&#xff1a; 联想E14笔记本 装机U盘 DiskImage v1.6 刷写工具 immortalwrt镜像 问题描述&#xff1a; 笔记本电脑如何安装openwrt 解决方案&#xff1a; 一、官方版 1.官网下载固件 2.BIOS关闭安全启动改为引导 3.用U盘启动进入PE系统后&#xff0c;需要先用PE系…

国产浪潮服务器:风扇免手动调节脚本

简介&#xff1a;浪潮集团&#xff0c;是中国本土顶尖的大型IT企业之一&#xff0c;中国领先的云计算、大数据服务商。浪潮集团旗下拥有浪潮信息、浪潮软件、浪潮国际&#xff0c;业务涵盖云计算、大数据、工业互联网等新一代信息技术产业领域&#xff0c;为全球120多个国家和地…

JNA实现JAVA调用C/C++动态库

1.JNA JNA全称Java Native Access&#xff0c;是一个建立在经典的JNI技术之上的Java开源框架&#xff08;https://github.com/twall/jna&#xff09;。JNA提供一组Java工具类用于在运行期动态访问系统本地库&#xff08;native library&#xff1a;如Window的dll&#xff09;而…

计算机网络——数据链路层-可靠传输的实现机制:回退N帧协议GBN(无差错情况、累积确认、有差错情况、发送窗口尺寸)

目录 回退N帧协议GBN 介绍 无差错情况 累积确认 有差错情况 发送窗口尺寸 小结 练习 解析 示意图 上篇中所介绍的停止-等待协议的信道利用率很低&#xff1b;若出现超时重传&#xff0c;则信道利用率更低。 如果发送方在收到接收方的确认分组之前可以连续发送多个数…

Leetcode—2413.最小偶倍数【简单】

2023每日刷题&#xff08;六十&#xff09; Leetcode—2413.最小偶倍数 class Solution { public:int smallestEvenMultiple(int n) {return (n % 2 1) * n;} };运行结果 之后我会持续更新&#xff0c;如果喜欢我的文章&#xff0c;请记得一键三连哦&#xff0c;点赞关注收藏…

局域网环境下的ntp对时

服务端&#xff1a; 此处为v4-sp4服务器 安装ntp&#xff0c;apt-get install ntp -y ,若为离线环境&#xff0c;则安装ntp和libopts25两个包。 配置&#xff1a; 在/etc/ntp.conf的配置文件里 加入 restrict default nomodify notrap noquery restrict 127.0.0.1 rest…