本文实例讲述了Java数据结构之双端链表原理与实现方法。分享给大家供大家参考,具体如下:
一、概述:
什么时双端链表:
链表中保持这对最后一个连点引用的链表
从头部插入
要对链表进行判断,如果为空则设置尾节点为新添加的节点
从尾部进行插入
如果链表为空,则直接设置头节点为新添加的节点,否则设置尾节点的后一个节点为新添加的节点
从头部删除
判断节点是否有下个节点,如果没有则设置节点为null
二、具体实现
public class FirstLastLinkList { //头 private Node first; //尾 private Node last; public FirstLastLinkList(){ first = null; last = null; } public void insertFirst(long value){ Node newNode = new Node(value); if (first == null) { last = newNode; }else { //把first节点往下移动 newNode.next = first; } //把插入的节点作为新的节点 first = newNode; } public void insertLast(long value){ Node newNode = new Node(value); if (first == null) { first = newNode; }else { last.next = newNode; } //把最后个节点设置为最新的节点 last = newNode; } public boolean isEmpty(){ return first == null; } public Node deleteFirst(){ if (first == null) { throw new RuntimeException("链表数据不存在"); } if (first.next == null) { last = null; } Node temp = first; first = temp.next; return temp; } public Node deleteByKey(long key){ Node current = first; Node last = first; while(current.data != key){ if (current.next == null) { System.out.println("没找到节点"); return null; } last = current; current = current.next; } if (current == first) { //return deleteFirst(); //指向下个就表示删除第一个 first = first.next; }else { last.next = current.next; } return current; } public void display(){ if (first == null) { //throw new RuntimeException("链表数据不存在"); return; } Node current = first; while(current != null){ current.display(); current = current.next; } System.out.println("---------------"); } public Node findByValue(long value){ Node current = first; while(current != null){ if (current.data != value) { current = current.next; }else { break; } } if (current == null) { System.out.println("没找到"); return null; } return current; } public Node findByKey(long key) { Node current = first; while (current.data != key) { if (current.next == null) { System.out.println("没找到"); return null; } current = current.next; } return current; } public Node findByPosition(int position){ Node current = first; //为什么是position - 1,因为要使用遍历,让current指向下一个, 所以position - 1的下个node就是要找的值 for (int i = 0; i < position - 1 ; i++) { current = current.next; } return current; } public static void main(String[] args) { FirstLastLinkList linkList = new FirstLastLinkList(); linkList.insertFirst(21); linkList.insertFirst(22); linkList.insertFirst(23); linkList.insertLast(24); linkList.insertLast(25); linkList.insertLast(26); linkList.insertLast(27); linkList.display(); System.out.println("---查找-------------------------------------"); linkList.findByKey(25).display(); System.out.println("--删除first-------------------------------------"); //linkList.deleteFirst().display(); ///linkList.deleteFirst().display(); //linkList.deleteFirst().display(); //linkList.deleteFirst().display(); System.out.println("-删除指定值---------------------------------------"); linkList.deleteByKey(27).display(); linkList.deleteByKey(21).display(); System.out.println("----------------------------------------"); linkList.display(); }}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- Java代理模式的优缺点分别有哪些?(Java代理模式有哪些优缺点)
- Java 内存泄露具体有哪些表现呢?(java内存泄露的表现有哪些)
- Java 与 Office 结合是否适合报表生成?(java office 适合报表生成吗 )
- 如何有效提升 java corn 表达式的性能?(如何优化java corn表达式的性能 )
- PHP数据类型转换常见误区解析
- 如何在 Java 中高效地创建列表?(如何在Java中创建列表)
- Java中dubbo的最佳实践案例有哪些?(java中dubbo有哪些最佳实践案例)
- 如何通过 Java 代码获取当前时间戳?(如何使用Java获取当前时间戳)
- 如何使用 Java 编写一个 circular 类?(怎么用java编写一个circular类)
- 在 Java 中如何安全地进行 SQL 拼接?(Java中怎么安全的进行SQL拼接)
猜你喜欢
AI推送时光机Java数据结构之双端链表原理与实现方法
后端开发2023-05-30
java数据结构中单链表与双向链表的实现方法
后端开发2023-06-20
Java数据结构之双向链表的实现
后端开发2022-11-13
Java数据结构之双向链表如何实现
后端开发2023-06-30
Java数据结构与算法学习之双向链表
后端开发2024-04-02
【一起学数据结构与算法】Java实现双链表
后端开发2023-09-04
Java数据结构之链表实现(单向、双向链表及链表反转)
后端开发2024-04-02
【算法基础】数据结构| 单链表+双链表 代码实现+图解+原理
后端开发2023-09-18
Java实现链表数据结构的方法
后端开发2024-04-02
java数据结构实现双向链表功能
后端开发2024-04-02
C++数据结构之双向链表怎么实现
后端开发2023-06-30
Java数据结构之图的原理与实现
后端开发2024-04-02
数据结构(Java实现)LinkedList与链表(上)
后端开发2023-08-30
Java数据结构与算法之单链表深入理解
后端开发2024-04-02
Java数据结构之LinkedList从链表到实现
后端开发2023-05-18
Java数据结构与算法之双向链表、环形链表及约瑟夫问题深入理解
后端开发2024-04-02
C语言数据结构之单链表与双链表的增删改查操作实现
后端开发2024-04-02
Java数据结构与算法学习之循环链表
后端开发2024-04-02
Java数据结构之线段树的原理与实现
后端开发2024-04-02
Java数据结构之实现哈希表的分离链接法
后端开发2024-04-02
咦!没有更多了?去看看其它编程学习网 内容吧