JAVA单向链表实现

JAVA单向链表实现

单向链表

链表和数组一样是一种最常用的线性数据结构,两者各有优缺点。数组我们知道是在内存上的一块连续的空间构成,所以其元素访问可以通过下标进行,随机访问速度很快,但数组也有其缺点,由于数组的内存是一次性申请的,就像基本数据类型一样,一次性申请所需的空间,在数据量变动很大的时候就容易导致预先申请的内存不够或内存浪费。在者就是在存的是有序数列时进行数据插入会比较麻烦,所以链表就是为了弥补数组的不足的一种数据结构。相反的,链表对于变动很大的数据有很大的适应性,而且其对于数据插入和删除很方便。而链表的缺点就是对于内存的浪费,链表除了存储需要的数据还要存储额外的指针。链表的节点示意图如下:

 

看到指针你可能会想:“我们这不是java语言吗?没有指针啊!”,没错!在我对java了解不是很深的时候我也这么想,但是我要说的是java虽然不允许程序员像c/c++那样使用指针,但java语言本身的实现还是离不开指针的(变量名其实就是指向jvm中一块内存的指针,我就不详述)。请看以下节点的代码:

//节点数据结构
private class Node{
private Object data=null;//数据域
private Node next=null;//下一个节点
private Node(Object data) {
this.data=data;
}
}

这里的节点class我是写成inner class的形式,后面有完整代码。还有一点就是这里object类型,这里也可以使用泛型

//链表数据结构
public class SingleLinkList {
int size=0;//链表长度,可有可无,有的话很容易实现很多链表的特殊操作
Node head=null;//头节点
public SingleLinkList() {
this.size=0;this.head=null;
}
}

有了这两个类,然后再来实现链表的一些基本操作:插入头节点,删除头节点,删除指定节点,查找指定节点。直接看完整源代码。

package singleLinkList;

public class SingleLinkList {

int size=0;//链表长度
Node head=null;

public SingleLinkList() {
this.size=0;this.head=null;
}

//节点数据结构
private class Node{
private Object data=null;//数据域
private Node next=null;//下一个节点
private Node(Object data) {
this.data=data;
}
}

//表头添加元素
public Object addHead(Object data) {
Node newHead=new Node(data);
if(size==0) {
this.head=newHead;
}
else {
newHead.next=this.head;
this.head=newHead;
}
size++;
return data;
}

//删除表头元素
public Object deleteHead() {
if(size>0) {
Node node=this.head;
this.head=this.head.next;
size--;
}
return null;
}

//查找指定元素
public Node findData(Object data) {
if(size==0)return null;
Node cur=this.head;

转载于:https://www.cnblogs.com/Davidhwj/p/10433387.html

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

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

相关文章

201771010102 常惠琢《面向对象程序设计(java)》第八周学习总结

1、实验目的与要求 (1) 掌握接口定义方法; (2) 掌握实现接口类的定义要求; (3) 掌握实现了接口类的使用要求; (4) 掌握程序回调设计模式; (5) 掌握Comparator接口用法; (6) 掌握对象浅层拷贝与深层拷贝方法&#xff1b…

新版 Android 已支持 FIDO2 标准,免密登录应用或网站

谷歌刚刚宣布了与 FIDO 联盟达成的最新合作,为 Android 用户带来了无需密码、即可登录网站或应用的便捷选项。 这项服务基于 FIDO2 标准实现,任何运行 Android 7.0 及后续版本的设备,都可以在升级最新版 Google Play 服务后,通过指…

t-sne原理解释_T-SNE解释-数学与直觉

t-sne原理解释The method of t-distributed Stochastic Neighbor Embedding (t-SNE) is a method for dimensionality reduction, used mainly for visualization of data in 2D and 3D maps. This method can find non-linear connections in the data and therefore it is hi…

Android Studio如何减小APK体积

最近在用AndroidStudio开发一个小计算器,代码加起来还不到200行。但是遇到一个问题,导出的APK文件大小竟然达到了1034K。这不科学,于是就自己动手精简APK。下面我们大家一起学习怎么缩小一个APK的大小,以hello world为例。 新建工…

js合并同类数组里面的对象_通过同类群组保留估算客户生命周期价值

js合并同类数组里面的对象This is Part I of the two-part series dedicated to estimating customer lifetime value. In this post, I will describe how to estimate LTV, on a conceptual level, in order to explain what we’re going to be doing in Part II with the P…

C#解析HTML

第一种方法:用正则表达式来分析 [csharp] view plaincopy 转自网上的一个实例:所有的href都抽取出来: using System; using System.Net; using System.Text; using System.Text.RegularExpressions; namespace HttpGet { c…

com编程创建快捷方式中文_如何以编程方式为博客创建wordcloud?

com编程创建快捷方式中文Recently, I was in need of an image for our blog and wanted it to have some wow effect or at least a better fit than anything typical we’ve been using. Pondering over ideas for a while, word cloud flashed in my mind. 💡Us…

ETL技术入门之ETL初认识

ETL技术入门之ETL初认识 分类: etl2014-07-10 23:11 3021人阅读 评论(2) 收藏 举报数据仓库商业价值etlbi目录(?)[-] ETL是什么先说下背景知识下面给下ETL的详细解释定义现在来看下kettle的transformation文件一个最简单的E过程例子windows环境 上图左边的是打开表…

ActiveSupport::Concern 和 gem 'name_of_person'(300✨) 的内部运行机制分析

理解ActiveRecord::Concern: 参考:include和extend的区别: https://www.cnblogs.com/chentianwei/p/9408963.html 传统的模块看起来像: module Mdef self.included(base)# base(一个类)扩展了一个模块"ClassMethods", b…

Python 3.8.0a2 发布,面向对象编程语言

百度智能云 云生态狂欢季 热门云产品1折起>>> Python 3.8.0a2 发布了,这是 3.8 系列计划中 4 个 alpha 版本的第 2 个。 alpha 版本旨在更加易于测试新功能和 bug 修复状态,以及发布流程。在 alpha 阶段会添加新功能,直到 beta 阶…

基于plotly数据可视化_如何使用Plotly进行数据可视化

基于plotly数据可视化The amount of data in the world is growing every second. From sending a text to clicking a link, you are creating data points for companies to use. Insights that can be drawn from this collection of data can be extremely valuable. Every…

ESLint简介

ESLint简介 ESLint是一个用来识别 ECMAScript 并且按照规则给出报告的代码检测工具,使用它可以避免低级错误和统一代码的风格。如果每次在代码提交之前都进行一次eslint代码检查,就不会因为某个字段未定义为undefined或null这样的错误而导致服务崩溃&…

数据科学与大数据是什么意思_什么是数据科学?

数据科学与大数据是什么意思Data Science is an interdisciplinary field that uses a combination of code, statistical analysis, and algorithms to gain insights from structured and unstructured data.数据科学是一个跨学科领域,它结合使用代码,…

C#制作、打包、签名、发布Activex全过程

一、前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信、调用,单单依靠HTML是无法实现了,因此必须借用Activex来实现。由于本人主要擅长C#,自然本文给出了用C#实现的范例,本文的预期…

用Python创建漂亮的交互式可视化效果

Plotly is an interactive Python library that provides a wide range of visualisations accessible through a simple interface.Plotly是一个交互式Python库,通过简单的界面即可提供广泛的可视化效果。 There are many different visualisation libraries avai…

Hadoop 2.0集群配置详细教程

Hadoop 2.0集群配置详细教程 前言 Hadoop2.0介绍 Hadoop是 apache 的开源 项目,开发的主要目的是为了构建可靠,可拓展 scalable ,分布式的系 统, hadoop 是一系列的子工程的 总和,其中包含 1. hadoop common &#xff…

php如何减缓gc_管理信息传播-使用数据科学减缓错误信息的传播

php如何减缓gcWith more people now than ever relying on social media to stay updated on current events, there is an ethical responsibility for hosting companies to defend against false information. Disinformation, which is a type of misinformation that is i…

[UE4]删除UI:Remove from Parent

同时要将保存UI的变量清空,以释放占用的系统内存 转载于:https://www.cnblogs.com/timy/p/9842206.html

BZOJ2503: 相框

Description P大的基础电路实验课是一个无聊至极的课。每次实验,T君总是提前完成,管理员却不让T君离开,T君只能干坐在那儿无所事事。先说说这个实验课,无非就是把几根导线和某些元器件(电阻、电容、电感等)…

泰坦尼克号 数据分析_第1部分:泰坦尼克号-数据分析基础

泰坦尼克号 数据分析My goal was to get a better understanding of how to work with tabular data so I challenged myself and started with the Titanic -project. I think this was an excellent way to learn the basics of data analysis with python.我的目标是更好地了…