图文版实现无头非循环单链表的增加和删除操作

news2024/12/23 23:35:08

hi,上一期已经给大家分享过代码版的链表的增删查改了,现在要对部分方法进行详细的介绍了

首先来说一说在任意位置的增加一个结点

废话不多说,开整

先来一幅图

加入已经有这样的链表了,现在要在 任意一个位置插入元素

我们先考虑一下

1.如果是在0下标插入,那么就直接调用头插法

2.如果在3下标插入,直接调用尾插法

3.在中间的位置插入

1.2比较简单,就不重复了

假如要在2下标插入一个结点,那就是要找2位置的前一个结点

 

//任意位置插入,第一个数据节点为0号下标
public void addIndex(int index, int data) 

要先判定index位置是否合法

private  void isValid(int index) throws  IndexOutOfException{
    if(index<0||index>size()){
        throw new IndexOutOfException("index位置不合法");
        
    }
}

然后要找到index-1位置的结点

private Node findPlace(int index){
    Node cur=head;
    int count=0;
    while(count!=index-1){
        count++;
        cur=cur.next;
    }
    return cur;
}

然后我们看那个图,就是用node.next=cur.next,然后cur.next=node就完成了插入的操作

public void addIndex(int index, int data){
    Node node=new Node(data);
    Node cur=findPlace(index);
    node.next=cur.next;
    cur.next=node;


}

这个就写完了

下面再来说一说这个删除值为key的结点的方法

现在要删除值为27的结点,

 

这个图说明要找到要删除结点的前一个结点

private Node searchPlace(int key){
    Node cur=head;
    while(cur.next!=null){
        if(cur.next.val==key){
            return cur;
        }
        cur=cur.next;
    }
    return null;
}

 

然后是删除操作的实现

//删除第一次出现关键字为key的节点
public void remove(int key){
    if(head==null){
        return;
    }
    if(head.val==key){
        head=head.next;
        return;
    }
    Node cur=searchPlace(key);
    Node del=cur.next;
    cur.next=del.next;

}

如果是删除最后一个结点,也是上述做法

最后一个

//删除所有值为key的节点
public void removeAllKey(int key)

这个是最复杂的

上图

public void removeAllKey(int key) {
    if (head == null) {
        return;
    }
    Node prev = head;
    Node cur = head.next;
    while (cur != null) {
        if (cur.val == key) {
            prev.next = cur.next;
            cur = cur.next;
        } else {
            prev = cur;
            cur = cur.next;

        }

    }
    if(head.val==key){
        head=head.next;
    }
}

 

今天的讲解就到这里了,我们下期再见了,886!!!

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

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

相关文章

zookeeper的安装与配置

1. 在root账户下创建zookeeper安装目录&#xff1a;mkdir /home/zookeeper 2. 进入zookeeper目录&#xff1a;cd /home/zookeeper 3. 通过wget命令下载zookeeper安装包&#xff1a;wget https://mirrors.bfsu.edu.cn/apache/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0…

以太网 VLAN(简介、MAC地址表与VLAN)

2.8.1 以太网 VLAN&#xff08;简介、MAC地址表与VLAN&#xff09; VLAN 虚拟局域网&#xff08;Virtual Local Area Network&#xff09;&#xff0c;通过VLAN划分不同的网络&#xff0c;能够有效提升网络的稳定性、缓解广播风暴带来的影响。 不同VLAN表示不同的虚拟局域网&am…

Unity与IOS⭐Unity接入IOS SDK的流程图

文章目录 🟥 整体思路🟧 如何复用SDK🟥 整体思路 1、先看一遍sdk的调用方法,将需要在unity中调用的方法记住给第二步使用。 2、新建一个Unity项目,写好去使用IOS SDK的方法。 3、导出Xcode工程,在Xcode中接入SDK。并根据SDK的文档,写好暴露给Unity的.h和.m文件。 …

[附源码]Python计算机毕业设计SSM焦作旅游网站(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计市场摊位管理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

振弦采集模块的信号检测与分析计算

VM系列振弦采集模块的信号检测与分析计算 1、延时采样 如下图示&#xff0c; 振弦传感器钢弦起振后&#xff0c;信号强度在短时间内迅速达到最大&#xff0c;然后在钢弦张力及空气阻力作用下逐渐恢复静止。我们可将整个振动过程分为起振、调整、稳定、消失几个阶段&#xff0c…

第5章 R语言基础学习——金融资产收益率计算

5.1 收益率定义 5.1.1 常用收益率 5.1.2 红利收益率 数据中Adjusted一般就调整好了红利的收益率 5.1.3 超额收益率 与市场基准比较 5.2 股票类资产收益率计算 5.2.1 单个股票收益率计算 1. 从txt读取数据 2. 三种方法、计算股票百分比日收益率 3. 算术平均收益 4. 几何平…

电源常用LDO线性稳压IC大全!

LDO线性稳压IC FS7203 高输入电压&#xff1a;高达30V 输超低静态电流&#xff1a;0.8uA&#xff08;Typ&#xff09; 输出电压范围&#xff1a;1.5-12V 输出电压精度&#xff1a;2% 输出电流&#xff1a;IOUT150mA &#xff08; VIN4.8V&VOUT3.3V&#xff09; 短路电流&am…

桥接模式Bridge

1.意图&#xff1a;将抽象部分与其实现部分分离&#xff0c;使它们都可以独立地变化。 2.结构 Abstraction定义抽象类的接口&#xff0c;维护一个指向Implementor类型对象的指针&#xff1b; RefinedAbstraction扩充由Abstraction定义的接口&#xff1b; Implementor定义实现类…

ruoyi系统启动

系统概要 系统分为2部分前端vue —— vscode&#xff0c;后端spring-boot —— eclipse 系统依赖服务&#xff1a; 数据库——mysql 缓存——redis 启动顺序 mysql ——> redis ——> eclipse ——> vscode mysql 启动 windowQ 输入 service 打开服务管理 找到…

[附源码]Python计算机毕业设计Django实验室管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Windows下免杀思路总结

1.简介 在安全厂商日趋成熟的背景下&#xff0c;编写免杀马的难度和成本日益增长。好用新兴的开源项目在短时间内就被分析并加入特征库。笔者调研了部分开源项目&#xff0c;其中也有项目做了类似的分析 [1]&#xff0c;目前能够免杀的项目初步统计&#xff0c;其特征一是star…

MySQL8.0 show create view BUG解析

GreatSQL社区原创内容未经授权不得随意使用&#xff0c;转载请联系小编并注明来源。GreatSQL是MySQL的国产分支版本&#xff0c;使用上与MySQL一致。作者&#xff1a;崔弘晨作者介绍&#xff1a;诺亚财富数据库DBA 擅长数据库SQL优化,喜欢分享技术文章来源&#xff1a;社区投稿…

【Linux】详解Linux权限管理

文章目录 1.Shell命令以及运行原理 2.Linux权限的概念 2.1用户介绍 2.2用户切换指令 su 当前所处目录不变 当前所处目录改变 3.Linux 权限管理 3.1文件访问者的分类 3.1.1 拥有者 3.1.2 所属组 3.1.3 other 3.1.4 总结 3.2文件类型和访问权限 3.2.1文件类型 3.2…

基于 SE (2)-XYZ 约束的地面车辆视觉-轮速计定位与建图

摘要-本文关注的是地面车辆使用轮速计和单目视觉传感器的SLAM问题&#xff0c;为了改进基于视觉的地面车辆估计精度&#xff0c;研究人员利用了近似平面运动的约束&#xff0c;通常将其作为 SE (3)位姿的随机约束来实现&#xff0c;在本文中提出了一个更简单的算法&#xff0c;…

如何利用数字创新使您的企业脱颖而出

如何利用数字创新使您的企业脱颖而出 数字创新并非易事&#xff0c;但它会对您的企业内部和外部产生积极影响。 然而&#xff0c;数字化的方式如此之多&#xff0c;企业很难决定将注意力集中在哪里。 本文的目的是概述数字创新的战略方法。这种方法让您重新审视现在与未来的…

订单管理是客户关系管理的有效延伸,那么订单管理系统对于企业的作用有哪些呢?

订单管理是客户关系管理的有效延伸&#xff0c;能更好的把个性化&#xff0c;差异化服务有机的融入到客户管理中去&#xff0c;能推动经济效益和客户满意度的提升。与此同时&#xff0c;随着电商的发展与经济全球化的影响&#xff0c;不少企业的订单量都是暴增状态。海量订单数…

【读书笔记】高级FPGA设计之高速率结构设计

目录 写在前面 1. 概念介绍 2. 高速度结构设计 2.1 高流量 2.2 低延时 2.3 优时序 2.3.1 组合逻辑插寄存器 2.3.2 并行结构 2.3.3 展平逻辑结构 2.3.4 寄存器平衡 2.3.5 重新安排路径 3. 总结 写在前面 本博客为阅读书籍《高级FPGA设计》的部分读书笔记&#xff0c…

XXL-JOB核心源码解读及时间轮原理剖析

你好&#xff0c;今天我想和你分享一下XXL-JOB的核心实现。如果你是XXL-JOB的用户&#xff0c;那么你肯定思考过它的实现原理&#xff1b;如果你还未接触过这个产品&#xff0c;那么可以通过本文了解一下。 XXL-JOB的架构图&#xff08;2.0版本&#xff09;如下&#xff1a; 它…

易基因|ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究

易基因&#xff5c;ChIP-seq等实验揭示CHD6转录激活前列腺癌通路的关键功能 | 肿瘤耐药研究 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年11月21日&#xff0c;北京大学基础医学院赵东宇研究员、美国休斯敦卫理公会研究所Min…