java 增 删 查 改_如何对java链表进行增、删、查、改操作
如何对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链表进行增、删、查、改操作相关推荐
- java中io是什么_深入理解Java中的IO
深入理解Java中的IO 转载自:http://blog.csdn.net/qq_25184739/article/details/51205186 本文的目录视图如下: Java IO概要 a.Ja ...
- 深入java虚拟机 第四版_深入理解Java虚拟机-常用vm参数分析
Java虚拟机深入理解系列全部文章更新中... https://blog.ouyangsihai.cn/shen-ru-li-jie-java-xu-ni-ji-java-nei-cun-qu-yu- ...
- java 和c 多态比较_多态在 Java 和 C 编程语言中的实现比较
2011 年 12 月 22 日发布 众所周知,多态是面向对象编程语言的重要特性,它允许基类的指针或引用指向派生类的对象,而在具体访问时实现方法的动态绑定.C++ 和 Java 作为当前最为流行的两种 ...
- java 面试题合集_撩课-Java面试题合辑1-50题
1.简述JDK.JRE.JVM? 一.JDK JDK(Java Development Kit) 是整个JAVA的核心, 包括了Java运行环境(Java Runtime Envirnment), 一 ...
- 有谁转行学java成功了的吗_转行学习java靠谱吗?
转行学Java靠谱吗?靠不靠谱主要还是看你自己是否想要学好Java技术,是否想要从事这方面的岗位工作,如果你已经有了这个决心,那么自然而然什么都不会问题.无论我们学Java是兴趣还是想要通过学好Jav ...
- java正则截取xml节点_实例讲述Java使用正则表达式截取重复出现的XML字符串功能...
Java使用正则表达式截取重复出现的XML字符串功能示例 本文实例讲述了Java使用正则表达式截取重复出现的XML字符串功能.分享给大家供大家参考,具体如下: public static void m ...
- java 获取 反射 方法 名_乐字节Java反射之一:反射概念与获取反射源头Class
一.Java反射机制概念 "程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言",如Python, Ruby是动态语言:显然C++,Java,C#不是动态语言,但是JAV ...
- java视频为什么这么多_为什么看java教学视频教的都是javase,两者难道语言相同吗?...
Java 分类 Java SE(Java Platform Standard Edition) :Java平台标准版.主要用于桌面应用程序的开发,是Java技术的核心,提供基础 Java开发工具.执行 ...
- java工程师有什么要求_什么是java,java工程师应该具备哪些能力?
这两年,虽然各种各样的新兴语言不断涌现,收获了一大批迷粉,但是java的地位,却始终难以撼动.作为一门成熟的,经久不衰的语言,java吸引了越来越多的人,想加入进来.但是,很多人在选择java前,或多 ...
最新文章
- 一季度跨越式增长,高灯科技跑出“第二曲线”
- c语言汽水瓶换汽水的编程题,c语言:2种方法编程及优化;喝汽水问题
- 谈谈高并发系统的限流
- 150 Evaluate Reverse Polish
- 审计署计算机培训心得体会,审计署计算机中级培训心得体会2018
- php安卓直播抓取,hls,android_安卓大部分浏览器播放HLS协议直播流会从头开始,hls,android,ffmpeg,m3u8 - phpStudy...
- JAVA中pin什么意思_银行业加密算法,PIN相关算法(java-国密)
- java webview事件_捕获“页面已完成加载”事件,并使用xwalk Webview在ionic / cordova MainActivity.java中进行操作...
- Arcgis 安装教程
- 小米笔记本安装系统 声卡驱动安装不上
- 科技论文中图片的处理方法
- 苏锡常CIO俱乐部春季论坛暨2020年会(苏州站)圆满落幕!
- html5中span作用,span标签的作用与用法总结
- linux手动重启网卡驱动,手动添加linux无线网卡驱动
- CTF-reverse菜鸡想要走出菜狗设计的迷宫
- Microsemi Libero系列教程(一)——Libero开发环境介绍、下载、安装与注册
- 微信小程序让凌乱的代码整齐好看紧凑
- 重装Win10系统后导致网速卡的解决办法
- 移动WEB各种布局开发笔记
- 关闭 Windows 安全中心警报 及 用户账户允许此应用对你的设备进行更改 通知 及 打开文件 - 安全警告 通知
热门文章
- VUE3路由Router导航、模式
- springboot细节挖掘(数据初始化)
- maven创建一个web项目(springmvc项目)
- visual c语言编译运行结果,Visual Studio 2015编译运行C语言文件问题小结
- Spring(二)Spring IOC
- linux 装jdk出错,redhat linux 9.0安装jdk出错,该如何解决
- AI队列长度检测:使用Keras进行对象检测
- 使用Vue.js和ASP.NET Core MVC实现CQRS模式
- Visual Studio Online 终于公开上线了
- 新的恶意软件将后门植入微软 SQL Server 中