java链表数据结构是什么_java 链表数据结构

java链表数据结构是什么_java 链表数据结构首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了。下面直接进入正题:先要定义一个结点类,如下:Java代码publicclassNode{Nodenext;//下一个结点的引用Objectobj;//结点元素publicNode(Objectobj){this.obj=obj;…

大家好,又见面了,我是你们的朋友全栈君。

首先,单链表相对于队列的优势在于存储地址不是连续的,这样的意义在于,操作其中的某一个位置的元素时不需要对之前的其他元素都进行内存操作,大大的为我们的计算机减压了。下面直接进入正题:

先要定义一个结点类,如下:

Java代码

public classNode {

Node next;//下一个结点的引用

Object obj;//结点元素

publicNode(Object obj){this.obj=obj;

}

}

然后就是我们的LinkedList类,先要定义一个空链表:

Node head=null;//创建一个空链表,头结点

Node last=head;//尾结点

打印链表有两种方法,可以采用递归,也可以使用非递归的方法,如下:

Java代码

/*** 非递归打印元素的方法*/

public voidprint(Node head){while(head!=null){

System.out.println(head.obj);

head=head.next;//索引向后移位

}

}/*** 递归打印链表元素的方法*/

public voidprintNode(Node head){if(head!=null){

System.out.println(head.obj);

Node node=head.next;

printNode(node);//递归调用

}

}

非递归方法有一个致命的缺陷,打印的同时改变了头结点的位置,所以我们应该倾向于使用递归方法。

说了这么多,增删查改正式开始:

向链表中添加元素。判断一个链表已经到达末尾的依据是该结点的next引用已经为Null,所以要向末尾添加一个结点,先要把新增结点放在最后,再把末尾结点向后移位,具体操作过程如下图:

1T5423N9-0.jpg

代码如下:

Java代码

/*** 向指定链表添加元素的方法

*@paramobj 插入的元素*/

public voidadd(Object obj){

Node node=new Node(obj);//新建结点

if(head==null){//如果链表为空

head =node;

}else{

last.next=node;//先把新增结点放在最后

}

last=node;//再把最后一个结点向后移位

}

插入元素。要插入一个新元素首先要创建一个新结点来存放它,而在具体实现的时候最让人头疼的时候无疑是怎样找到指定位置的索引了,这里所说的方法在下面的其他操作基本上都是这样衍生的,先了解一下插入结点的具体实现,根据这个结构的逻辑定义,如果我们要在结点A之后插入一个结点,那么就还需要修改结点A的next引用,实际上就是让A结点的next引用指向新增结点的元素域,然后再让新增结点的next引用指向A原本next结点(B)的元素域,用图来表示更加直观:

1T542A96-1.jpg

代码如下:

Java代码

/*** 向链表中插入新元素的方法*/

public void insert(intindex,Object obj){

Node node=head;int j=0;while(node!=null&&j

node=node.next;

j++;

}

Node sert=new Node(obj);//被插入的结点

sert.next=node.next;

node.next=sert;

}

删除元素。知道了插入元素的具体操作之后,删除元素就显得相对简单了,比如说我们要删除一个结点b,就是要使这个结点失去引用,但是注意不要直接写b=b.next,这样的话b的引用还是存在,而且还会出现另一种错误,大家可以自己试一下,如图所示,正确的删除结点的方法如下:

1T54220Y-2.jpg

代码如下:

Java代码

/*** 删除指定位置的结点

*@paramindex 索引*/

public void delete(intindex){

Node node=head;int j=0;while(node!=null&&j

node=node.next;

j++;

}

node.next=node.next.next;//删除第index个元素

}

最后就是修改元素了。相信大家看完之前的两个方法,接下来的这个方法在心中早就已经泛起波澜了吧,那下面就直接贴代码了:

Java代码

/*** 改变指定位置的元素

*@paramindex 索引

*@paramobj*/

public void modify(intindex,Object obj){

Node node=head;int j=0;while(node!=null&&j

node=node.next;

j++;

}

node.obj=obj;

}

当然,除了这些基本操作,我们还可以写获取链表长度的方法,获取指定位置的元素的方法等等

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/140527.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux挂载磁盘教程「建议收藏」

    linux挂载磁盘教程「建议收藏」本文中的磁盘/dev/sdb为笔者测试服务器上的命名,在您的服务器中可能是/dev/xdb、/dev/vdb、/dev/xvdb等等请根据实际情况进行修改.1、创建挂载目录mkdir-p/www2、确认是否没有分区的磁盘,如下图,没有分区的磁盘是/dev/sdb,在您的服务器中可能是/dev/vdb,请注意按照实际名称修改fdisk-l3、为磁盘分区,若已分区,可跳过fdisk/dev/sdb4、输入n开始创建分区5、输…

    2022年6月19日
    78
  • java 正则表达式 替换 html,java 正则表达式 替换 html「建议收藏」

    java 正则表达式 替换 html,java 正则表达式 替换 html「建议收藏」java正则表达式替换html[2021-01-2922:37:07]简介:java正则表达式用法:1、使用Pattern类进行字符串的拆分,使用的方法是【String[]split(CharSequenceinput)】;2、使用Matcher类进行字符串的验证和替换。相关免费学习推荐:javaphp正则表达式替换图片地址的方法:首先PHP正则提取图片img标记中的任意属性;然后…

    2022年5月16日
    46
  • 向 J2EE 架构师 学习之路[通俗易懂]

    向 J2EE 架构师 学习之路[通俗易懂]首先表明下这个只是个人记录,看到觉得很烂莫怪。认真看点书学点知识,脚踏实地的走,记录学到的东西,收获的东西,慢慢的成长。今天心血来潮,想看下书,百度搜索了下到csdn下载了一本《TheJ2EEArchitect’sHandbook》,毕竟想成为J2EE架构师自己觉得自己路还很长,一直觉得自己很笨,做事方法肯定有问题,一会看js,一会看java,一会看j2ee,感觉确认很烦,自己未来…

    2022年6月24日
    28
  • JS日期格式化转换方法

    JS日期格式化转换方法1.将日期转换为指定的格式:比如转换成年月日时分秒这种格式:yyyy-MM-ddhh:mm:ss或者yyyy-MM-dd。当然是网上的方法,只是总结下。可以为Date原型添加如下的方法:Date.prototype.format=function(fmt){varo={“M+”:this.getMonth()+1,…

    2022年6月12日
    29
  • 中国工商银行基金定投[通俗易懂]

    中国工商银行基金定投[通俗易懂]http://www.icbc.com.cn/personal/detail_financing.jsp?column=%B8%F6%C8%CB%BD%F0%C8%DA%3E%CD%B6%D7%CA%

    2022年8月3日
    6
  • 介绍你所使用的linux系统_linux系统官网

    介绍你所使用的linux系统_linux系统官网简介作者:刘明,软件工程师,上海交通大学通信与电子工程系本文讲解SNMPTrap,在介绍Trap概念之前,首先认识一下SNMP吧。简单网络管理协议(SimpleNetworkManagementProtocol)是一种应用层协议,是TCP/IP协议族的一部分。它使网络设备之间能够方便地交换管理信息。能够让网络管理员管理网络的性能,发现和解决网络问题及进

    2022年8月20日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号