看动画学算法之: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; }
本文为阿里云原创内容,未经允许不得转载。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
【HarmonyOS】应用开发HarmonyOS应用开发学习指南 - HDC2020
2020年9月10日,华为HarmonyOS 2.0版本正式官宣!这一次,借助 HarmonyOS 全场景分布式系统和设备生态,将定义全新的硬件、交互和服务体验,打开焕然一新的全场景世界,不愧是HarmonyOS! 那HarmonyOS系统是什么呢?它又将如何助力开发者们更加便捷、高效地开发应用? 小编这就精心准备并汇总了如下HarmonyOS应用开发的相关资料,赶快戳下方链接,加入 HarmonyOS 生态,与我们一起构建万物互联的新时代吧~ 【HDC2020】1-HarmonyOS理念和设计 电梯直达→https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202366763645670051&fid=0101303901040230869 【HDC2020】2-从零开始开发一个HarmonyOS应用 电梯直达→https://developer.huawei.com/consumer/cn/forum/topicview?tid=0202366766237660052&fid=010130...
- 下一篇
深度学习工具包 OpenVINO 2021发行版
关注我们,让开发变得更有趣 内容翻译、整理 | 刘波 原文链接 | https://software.intel.com/content/www/us/en/develop/articles/openvino-relnotes.html 英特尔分发版OpenVINO 2021工具套件发布说明 OpenVINO工具套件介绍 英特尔分发版OpenVINO工具套件用于解决计算机视觉、语音识别、自然语言处理以及推荐系统等应用方案的快速部署。基于最新的人工神经网络,包括卷积神经网络、序列神经网络和基于注意力机制的网络等,该套件在跨英特尔硬件平台上支持计算机视觉和非视觉负载,并支持从边缘到云的高性能AI和深度学习推理。 主要特性: 1. 支持从边缘到云的深度学习推理。 2. 使用通用API,支持跨英特尔各类加速器的异构执行,包括英特尔CPU、英特尔集成图形处理器、英特尔高斯和神经网络加速器、英特尔第二代神经网络计算棒和基于英特尔Movidius视觉处理单元的英特尔视觉加速器设计。 3. 通过易于使用的CV函数库和预优化的计算核心,加快上市时间。 4. 包含对标准CV的优化调用,以及OpenCV和O...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS关闭SELinux安全模块
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Hadoop3单机部署,实现最简伪集群