Java代码详解数据结构中单链表的实现 |
您所在的位置:网站首页 › 数据结构单链表的建立及输出 › Java代码详解数据结构中单链表的实现 |
学习算法之前,需要先学习数据结构,因为当你了解了数据的结构之后,你才可以更好地理解算法。下面,我为大家带来一篇关于Java代码实现单链表数据结构实现的文章,希望能够帮助各位小伙伴对于单链表数据结构的理解。 一、图示
链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。 实际中链表的结构非常多样,以下情况组合起来就有8种链表结构: 单向、双向 带头、不带头 循环、非循环 今天,我们实现的是一个 单向 无头 非循环的链表。 下面是此链表的结构组成。 (1)定义一个节点类型 我们创建一个 ListNode 的类作为节点类型,那么我们如何定义成员属性呢? 通过上面的结构分析,我们需要定义两个成员变量 val --作为该节点的存储的数值, next – 保存下一个节点的地址/引用。 同时定义之后,他们的默认值为 0 ,null ,所以要想赋予这个节点数值,要写一个构造方法去首先保存数值。 这里我们提供了两个构造方法,一个是实现提供数值的节点,另一个是没有提供数值的节点,方便我们之后使用。 之后我们在 MyListNode 的类中实现单链表的各种方法。 (2)头插法
以上述结构为例,这个单链表没有专门的傀儡节点来充当头节点,首个节点就定义为头节点,所以头插法,就是我们定义一个节点,插在这个链表的最前面,作为新的 head。 代码实现: 1.定义一个插入的节点 ListNode cur = new ListNode(2);此时我们就创建了一个val 为2 的节点。 2.插在头节点的前面 这里分两种情况, 第一次插入节点 不是第一次插入节点 头插之后的结构: 代码实现: (3)尾插法 和头插法类似,同样插入一个节点,在链表的最后。 这里插入也分为两种情况 第一次插入节点 不是第一次插入节点 代码实现: (4)根据下标插入节点 第一个数据节点为0号下标,任意位置插入节点。 还以上面的链表为例,我们想将新的节点插入到2 号位置 如果想插到2号位置,我们需要改变原来的 1号位置节点和2号位置节点的相关属性。 思路实现: 1.先判断传入的 index 下标位置是否合法 2.如果传入的index==0,头插法 3.如果传入的index==sizeof(),尾插法 4.如果 sizeof() > index > 0 在链表中间插入,我们首先要找到 index-1 位置的节点 prev 查找 index-1 修改 prev节点的属性 以及 新节点的属性 node.next = prev.next prev.next = node;代码实现过程 (5)查找关键字 以上面的链表为例,我们现在要查找这个链表中是否出现 val=20 的节点,如果存在,那么返回true,如果不存在,则返回 false. 遍历链表,走过每一个节点,如果 cur.val == key,则 return ture ,遍历完后还未找到 key,那么return false. (6)删除第一次出现的关键字 思路实现: 代码实现: (7)得到单链表的长度 (8)单链表打印展示 不能是this.head.next != null 这样写 最后一个节点是不能被打印的 (9)节点的回收 节点的回收有两种方式: 1.暴力法 直接将head 置空 2. 挨个置空 遍历单链表,将每一个节点的next都置为 null. 到这里,本篇关于Java代码实现数据结构中单链表的文章就介绍结束了,如果您还想要了解更多关于用Java实现其他数据结构的内容,可以多多关注W3Cschool相关内容的文! |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |