看动画学算法之:linkedList

简介

linkedList应该是一种非常非常简单的数据结构了。节点一个一个的连接起来,就成了linkedList。今天我们使用动画的方法一起来看看linkedList是怎么插入和删除的。

linkedList的构建

linkedList是由一个一个的节点构成的。而每个节点只需要存储要保存的数据和下一个节点的引用即可。

linkedList本身需要一个head节点,所以我们的linkedList可以这样构建:

public class LinkedList {Node head; // head 节点//Node表示的是Linked list中的节点,包含一个data数据和下一个节点的引用class Node {int data;Node next;//Node的构造函数Node(int d) {data = d;}}
}

linkedList的操作

先看一下linkedList怎么插入数据,插入数据有三种方式,头部插入,尾部插入,中间插入。

头部插入

先看一个头部插入的例子:

头部插入的逻辑是什么呢?

新插入的节点作为head节点,然后将原来的head节点指向当前head节点的next引用即可。

    //插入到linkedList的头部public void push(int newData) {//构建要插入的节点Node newNode = new Node(newData);//新节点的next指向现在的head节点newNode.next = head;//现有的head节点指向新的节点head = newNode;}

尾部插入

再看一下尾部插入的例子:

插入的逻辑是什么呢?

找到最后一个节点,然后将最后一个节点的next指向新插入的节点。

//新节点插入到list最后面public void append(int newData) {//创建新节点Node newNode = new Node(newData);//如果list是空,则新节点作为head节点if (head == null) {head = newNode;return;}newNode.next = null;//找到最后一个节点Node last = head;while (last.next != null) {last = last.next;}//插入last.next = newNode;return;}

中间插入

再看一下中间插入的例子:

这个例子中,我们在第三个节点的位置插入了一个93。

插入逻辑就是先找到第二个节点,将第二个节点的next指向新节点,然后将新节点的next指向原先的第三个节点。

看下java代码如何实现:

//插入在第几个元素之后public void insertAfter(int index, int newData) {Node prevNode = head;for (int i = 1; i < index; i++) {if (prevNode == null) {System.out.println("输入的index有误,请重新输入");return;}prevNode = prevNode.next;}//创建新的节点Node newNode = new Node(newData);//新节点的next指向prevNode的下一个节点newNode.next = prevNode.next;//将新节点插入在prevNode之后prevNode.next = newNode;}

删除节点

再看一下怎么删除某个位置的节点:

上面的例子中,我们要删除第5个节点。

删除的逻辑就是找到第4个节点和第6个节点。然后将第四个节点的next指向第6个节点即可。

看下相应的java代码如下:

    //删除特定位置的节点void deleteNode(int index){// 如果是空的,直接返回if (head == null)return;// head节点Node temp = head;// 如果是删除head节点if (index == 1){head = temp.next;return;}// 找到要删除节点的前一个节点for (int i=1; temp!=null && i<index-1; i++)temp = temp.next;// 如果超出范围if (temp == null || temp.next == null)return;// temp->next 是要删除的节点,删除节点Node next = temp.next.next;temp.next = next;}

 

原文链接
本文为阿里云原创内容,未经允许不得转载。

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

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

相关文章

CSDN鸿蒙社区福利:HarmonyOS Beta 版内测资格申请

HarmonyOS Beta 版测试申请入口已于5月17日全面关闭&#xff0c;屏幕前正在敲代码的你是不是错失了这次机会&#xff1f; 作为 HarmonyOS 的合作伙伴&#xff0c;“CSDN鸿蒙社区”为广大 CSDN 乡亲们申请到部分内测资格&#xff0c;只要拥有内测资格设备即可免费申请&#xff0…

linux环境~Kafka集群 监控 Kafka Eagle 图形化版本

文章目录一、安装、配置、验证1. 安装包下载2. 开启kafka JMX3. 安装JDK&#xff0c;配置JAVA_HOME4. 上传安装包、解压5. 配置Kafka-eagle环境变量6. 配置Kafka_eagle7. 配置ke.sh8. 启动Kafka_eagle9. 防火墙10. 访问Kafka eagle二、监控面本总览2.1. Dashboard2.2. MESSAGE2…

前端搞报表|数据分析提效全链路解决方案

简介&#xff1a; 前端早早聊直播干货 作者&#xff1a;闲鱼技术-云听 背景介绍 闲鱼 2014 年成立&#xff0c;到现在的话已经实现了从 0 ~ 千万级 DAU 的跃迁&#xff0c;随着业务的快速发展&#xff0c;业务决策方法紧跟升级。从最原始的经验驱动到更加科学合理的数据驱动…

kafka消息过期时间设置(全局和特定topic)

文章目录一、kafka 全局消息过期时间设置1. 配置文件夹2. 修改配置3. 重启配置生效二、针对特定topic设置过期时间2.1. 配置文件夹2.2. 执行设置命令三、kafka过期消息删除过程一、kafka 全局消息过期时间设置 1. 配置文件夹 进入kafka配置文件夹 /app/kafka_2.12-2.2.0/con…

DeVOpS 实战:Kubernetes 微服务监控体系

来源 | 无敌码农责编 | 寇雪芹头图 | 下载于视觉中国监控系统是运维体系乃至整个软件产品生命周期中最重要的一环&#xff0c;完善的监控可以帮助我们事前及时发现故障&#xff0c;事后快速追查定位问题。而在以微服务为代表的云原生架构体系中&#xff0c;系统分为多个层次&am…

面对复杂业务,if-else coder 如何升级?

作者 | 张建飞 阿里巴巴高级技术专家 导读&#xff1a;针对业务在不同场景下的差异&#xff0c;我们常常会习惯性地使用 if-else 来实现不同的业务逻辑&#xff0c;久而久之代码越来越难以维护。那么如何消除这些 if-else&#xff1f;面对复杂业务应如何思考和分析&#xff1f…

adobe怎么统计字数_SEO技能:怎么写站内文章对网站排名更好?

每个做seo的人都知道真相&#xff0c;而且不会累积千里。意思是要注意网站上每篇文章的写作&#xff0c;因为网站的流量和权重一般需要所有网页的共同支持。因此&#xff0c;如何撰写有利于网站优化的文章尤为重要。虚拟社群提醒大家&#xff0c;细节通常被认为是成功的。通过写…

网站都变成灰色,一行代码就搞定了!

文章目录一、主流网站主题分析1. 腾讯课堂2. bilibili3. CSDN二、默认样式2.1. 腾讯课堂2.2. bilibili2.3. CSDN三、 案例demo一、主流网站主题分析 实现原理&#xff1a;在html标签上的class添加一个全局过滤器样式即可 1. 腾讯课堂 在html标签添加一个class&#xff0c;给cl…

应用架构之道:分离业务逻辑和技术细节

简介&#xff1a; “让上帝的归上帝&#xff0c;凯撒的归凯撒。” 作者 | 张建飞 阿里巴巴高级技术专家 架构 什么是架构&#xff1f; 关于架构这个概念很难给出一个明确的定义&#xff0c;也没有一个标准的定义。 硬是要给一个概述&#xff0c;我认为架构就是对系统中的实…

Java面试高频题:Spring Boot+JVM+Nacos高并发+高可用已撸完​

2021都说工作不好找&#xff0c;也是对开发人员的要求变高。前段时间自己有整理了一些Java后端开发面试常问的高频考点问题做成一份PDF文档&#xff08;1000道高频题&#xff09;&#xff0c;同时也整理一些图文解析及笔记&#xff0c;今天在这免费分享给大家&#xff0c;希望大…

python更新数据库表的时间字段_python更新数据库中某个字段的数据(方法详解)

连接数据库基本操作&#xff0c;我把每一步的操作是为什么给大家注释一下&#xff0c;老手自行快进。请注意这是连接数据库操作&#xff0c;还不是更新。import pymysql #导包#连接数据库db pymysql.connect(host"localhost", user"用户名", password&quo…

IEEE EDGE 2020论文:Astraea — 以优雅的方式在边缘部署AI服务

简介&#xff1a; 近日&#xff0c;阿里云边缘计算团队博士后付哲的论文《Astraea: Deploy AI Services at the Edge in Elegant Ways》入选2020年IEEE边缘计算国际会议&#xff08;IEEE International Conference on Edge Computing&#xff09;&#xff0c;并在大会上进行了宣…

Mendix:云原生应用是软件的未来

作者 | Mendix投稿 编辑 | 宋 慧 头图 | 付费下载于东方IC 如今&#xff0c;在构建新的应用时&#xff0c;很多公司都会想到 “云端优先”。但随着科技的发展&#xff0c;更好的方法是考虑 “云原生”应用。 云原生应用利用了诞生于云端的平台和流程的优势。它们具有高可扩展…

如何生成 Flink 作业的交互式火焰图?

简介&#xff1a; Flink 是目前最流行的大数据及流式计算框架之一&#xff0c;用户可以使用 Java/Scala/Python 的 DataStream 接口或者标准 SQL 语言来快速实现一个分布式高可用的流式应用&#xff0c;通过内部的 Java JIT、off-heap 内存管理等技术优化性能&#xff0c;并且有…

xxl-job分布式调度参数传递和调度⽇志配置

文章目录1. 参数传递2. 调度⽇志1. 参数传递 UI界⾯参数传递 String jobParam XxlJobHelper.getJobParam();2. 调度⽇志 执⾏⽇志打印 需要通过 “XxlJobHelper.log” 打印执⾏⽇志 执⾏结果 默认任务结果为 “成功” 状态&#xff0c;不需要主动设置 ⾃主设置任务结果&…

蚂蚁王旭:开源协作如何提升业界的安全?

简介&#xff1a; 开发者、组织、业界机构的共同努力&#xff0c;让开源项目和社区&#xff0c;乃至整个世界变得更加安全。 在前不久的上海外滩大会上&#xff0c;蚂蚁资深技术专家、Kata Containers创始人王旭向参会者分享了开源、开放协作与软件安全可信的话题&#xff0c;本…

store下拉框同步_关于选择主下拉框后~后面的下拉框跟着同步一起变化的问题~~...

关于选择主下拉框后~后面的下拉框跟着同步一起变化的问题~~代码很简单~4个下拉框~想要实现的效果就是~主下拉框选择了"赵子龙"&#xff0c;后面3个下拉框当前选项也同步成“赵子龙”。自己简单了实现了下~不过有bug求大 神 指 点~万分感谢~刘玄德关云长张翼德赵子龙魏…

顶级技术大咖,揭秘实时音视频开发的超级风口

2021年初因为Elon Musk“带货”而走红的音频社交App Clubhouse&#xff0c;又以肉眼可见的速度跌落神坛&#xff0c;下载量从2月的960 万/月跌至4月的92万/月。不过在5月&#xff0c;Clubhouse终于推出了安卓版&#xff0c;并表示接下来也会对所有用户开放。 另一边&#xff0c…

如何让一套代码适配所有iOS设备尺寸?

简介&#xff1a; 随着移动互联网设备和技术的发展&#xff0c;各种移动设备屏幕尺寸层出不穷&#xff0c;折叠屏、分屏、悬浮窗等等&#xff0c;面对越来越多样的屏幕&#xff0c;如果为每种尺寸单独进行适配&#xff0c;不仅费时费力&#xff0c;还会增加端侧代码的开发与维护…

述职答辩提问环节一般可以问些什么_论文答辩一般会问什么问题?需要注意什么事项?...

毕业论文过了之后&#xff0c;就要开始准备答辩了&#xff0c;那么论文答辩一般会问什么问题呢&#xff1f;需要注意什么事项呢&#xff1f;别急&#xff0c;今天小编就和大家详细讲讲&#xff0c;下面就一起来看看吧&#xff01;一、论文答辩一般会问什么问题1、为什么要选择这…