如何对java链表进行增、删、查、改操作

发布时间:2020-06-23 10:41:33

来源:亿速云

阅读:79

作者:Leah

如何对java链表进行增、删、查、改操作?针对这个问题,今天小编总结了这篇文章,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。

链表也是一个线性的数据结构,与数组不同的是,链表在内存中的存储方式是随机存储。

下面给出涵盖链表四个操作的一个完整的例子,有几点需要注意的是:

(一)在增删改查之前,都需要对给出的下标进行边界判断;

(二)增加一个名为last的节点,可以方便在链表的尾部进行操作,省去了查找到最后一个节点的时间复杂度;

(三)在链表的内部插入元素时,我们先找到要插入位置的前一个节点prevNode,然后可以记录下prevNode的next,插入时先将prevNode的next指向要插入的节点,再将要插入的节点的next指向当前的next。这一点和C++中的操作也略有不同;

(四)删除节点时,用removedNode来记录删除节点的返回值,并且不要忘了size要减1。

操作示例如下:public class MyLinkedList {

//定义一个静态的内部类

private static class Node{

int data;

Node next;

Node(int data){

this.data = data;

}

}

private Node head;

private Node last;//为了方便尾部插入元素的操作

private int size;//size表示链表的实际长度

public void insert(int data, int index)throws Exception{

if(index < 0 || index > size)

throw new IndexOutOfBoundsException("超出链表节点范围!");

Node insertedNode = new Node(data);

if(size == 0){//插入第一个元素时元素个数为0

head = insertedNode;

last = insertedNode;

}else if(size == index){//在链表的末尾插入

last.next = insertedNode;

last = insertedNode;

}else{

Node prevNode = get(index - 1);

Node nextNode = prevNode.next;

prevNode.next = insertedNode;

insertedNode.next = nextNode;

}

size++;

}

public void update(int data, int index) throws Exception{

if(index < 0 || index >= size)

throw new IndexOutOfBoundsException("超出链表节点范围!");

if(index == 0)

head.data = data;

else if(index == size - 1)

last.data = data;

else{

Node temp = get(index);

temp.data = data;

}

}

public Node remove(int index) throws Exception {

if(index < 0 || index >= size){

throw new IndexOutOfBoundsException("超出链表节点范围!");

}

Node removedNode = null;//不给removedNode分配堆内存

if(index == 0){

removedNode = head;

head = head.next;

}

else if(index == size - 1){

//删除尾结点

Node prevNode = get(index - 1);

removedNode = prevNode.next;

prevNode.next = null;

last = prevNode;

}

else{

Node prevNode = get(index - 1);

Node nextNode = prevNode.next.next;

removedNode = prevNode.next;

prevNode.next = nextNode;

}

size--;

return removedNode;

}

//查找链表元素

public Node get(int index) throws Exception{

if(index < 0 || index >= size){

throw new IndexOutOfBoundsException("超出链表节点范围!");

}

Node temp = head;

for(int i = 0; i < index; i++){

temp = temp.next;

}

// size--;

return temp;

}

//输出链表

public void output(){

Node temp = head;

while(temp != null){

System.out.println(temp.data);

temp = temp.next;

}

}

public static void main(String[] args) throws Exception{

MyLinkedList myLinkedList = new MyLinkedList();

myLinkedList.insert(3,0);

myLinkedList.insert(7,1);

myLinkedList.insert(9,2);

myLinkedList.insert(5,3);

myLinkedList.insert(6,1);

myLinkedList.remove(0);

myLinkedList.update(2,1);

myLinkedList.output();

System.out.println(myLinkedList.size);

}

}

关于对java链表进行增、删、查、改操作的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

java 增 删 查 改_如何对java链表进行增、删、查、改操作相关推荐

  1. java中io是什么_深入理解Java中的IO

    深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...

  2. 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析

    Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...

  3. java 和c 多态比较_多态在 Java 和 C 编程语言中的实现比较

    2011 年 12 月 22 日发布 众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定.C++ 和 Java 作为当前最为流行的两种 ...

  4. java 面试题合集_撩课-Java面试题合辑1-50题

    1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...

  5. 有谁转行学java成功了的吗_转行学习java靠谱吗?

    转行学Java靠谱吗?靠不靠谱主要还是看你自己是否想要学好Java技术,是否想要从事这方面的岗位工作,如果你已经有了这个决心,那么自然而然什么都不会问题.无论我们学Java是兴趣还是想要通过学好Jav ...

  6. java正则截取xml节点_实例讲述Java使用正则表达式截取重复出现的XML字符串功能...

    Java使用正则表达式截取重复出现的XML字符串功能示例 本文实例讲述了Java使用正则表达式截取重复出现的XML字符串功能.分享给大家供大家参考,具体如下: public static void m ...

  7. java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class

    一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...

  8. java视频为什么这么多_为什么看java教学视频教的都是javase,两者难道语言相同吗?...

    Java 分类 Java SE(Java Platform Standard Edition) :Java平台标准版.主要用于桌面应用程序的开发,是Java技术的核心,提供基础 Java开发工具.执行 ...

  9. java工程师有什么要求_什么是java,java工程师应该具备哪些能力?

    这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...

最新文章

  1. 一季度跨越式增长,高灯科技跑出“第二曲线”
  2. c语言汽水瓶换汽水的编程题,c语言:2种方法编程及优化;喝汽水问题
  3. 谈谈高并发系统的限流
  4. 150 Evaluate Reverse Polish
  5. 审计署计算机培训心得体会,审计署计算机中级培训心得体会2018
  6. php安卓直播抓取,hls,android_安卓大部分浏览器播放HLS协议直播流会从头开始,hls,android,ffmpeg,m3u8 - phpStudy...
  7. JAVA中pin什么意思_银行业加密算法,PIN相关算法(java-国密)
  8. java webview事件_捕获“页面已完成加载”事件,并使用xwalk Webview在ionic / cordova MainActivity.java中进行操作...
  9. Arcgis 安装教程
  10. 小米笔记本安装系统 声卡驱动安装不上
  11. 科技论文中图片的处理方法
  12. 苏锡常CIO俱乐部春季论坛暨2020年会(苏州站)圆满落幕!
  13. html5中span作用,span标签的作用与用法总结
  14. linux手动重启网卡驱动,手动添加linux无线网卡驱动
  15. CTF-reverse菜鸡想要走出菜狗设计的迷宫
  16. Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册
  17. 微信小程序让凌乱的代码整齐好看紧凑
  18. 重装Win10系统后导致网速卡的解决办法
  19. 移动WEB各种布局开发笔记
  20. 关闭 Windows 安全中心警报 及 用户账户允许此应用对你的设备进行更改 通知 及 打开文件 - 安全警告 通知

热门文章

  1. VUE3路由Router导航、模式
  2. springboot细节挖掘(数据初始化)
  3. maven创建一个web项目(springmvc项目)
  4. visual c语言编译运行结果,Visual Studio 2015编译运行C语言文件问题小结
  5. Spring(二)Spring IOC
  6. linux 装jdk出错,redhat linux 9.0安装jdk出错,该如何解决
  7. AI队列长度检测:使用Keras进行对象检测
  8. 使用Vue.js和ASP.NET Core MVC实现CQRS模式
  9. Visual Studio Online 终于公开上线了
  10. 新的恶意软件将后门植入微软 SQL Server 中