public class Link { public long dData; public Link next; public Link previous; public Link(long dData){ this.dData = dData; } public void displayLink(){ System.out.print(dData+" "); } }
public class DoublyLinkedList { private Link first; private Link last; public DoublyLinkedList() { first = null; last = null; } public boolean isEmpty() { return first == null; } public void insertFirst(long dd) { Link newLink = new Link(dd); if (isEmpty()) { last = newLink; } else { first.previous = newLink; } newLink.next = first; first = newLink; } public void insertLast(long dd) { Link newLink = new Link(dd); if (isEmpty()) { first = newLink; } else { last.next = newLink; newLink.previous = last; } last = newLink; } public Link deleteFirst() { Link temp = first; if (first.next == null) { last = null; } else { first.next.previous = null; } first = first.next; return temp; } public Link deleteLast() { Link temp = last; if (last.previous == null) { first = null; } else { last.previous.next = null; } last = last.previous; return temp; } public boolean insertAfter(long key, long dd) {// 插入指定项后面 Link current = first; while (current.dData != key) { current = current.next; if (current == null) return false;// 退出方法,表示没有插入成功 } Link newLink = new Link(dd); if (current == last) { newLink.next = null; last = newLink; } else { newLink.next = current.next; current.next.previous = newLink; } newLink.previous = current; current.next = newLink; return true; } public Link deleteKey(long key) {// 删除指定数据项(从头删除) Link current = first; while (current.dData != key) { current = current.next; if (current == null) return null;// 退出方法,没有找到 } if (current == first) {// 删除的数据项第一个 first = current.next; } else { current.previous.next = current.next; } if (current == last) { last = current.previous; } else { current.next.previous = current.previous; } return current; } public void displayForward() {// 从前向后显示 System.out.print("List(first-->last):"); Link current = first; while (current != null) { current.displayLink(); current = current.next; } System.out.println(); } public void displayBackward() {// 从后向前显示 System.out.print("List(last-->first):"); Link current = last; while (current != null) { current.displayLink(); current = current.previous; } System.out.println(); } }
相关推荐
用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。
用java实现双向链表的完整操作,主要用到内部类实现。
主要介绍了Java实现双向链表(两个版本)的相关资料,需要的朋友可以参考下
JAVA实现链表_双向链表
本篇文章主要介绍了JAVA实现双向链表的增删功能的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了java 实现双向链表实例详解的相关资料,需要的朋友可以参考下
通过java实现的双向链表,及反转功能,可能对面试有用哦
操作包括: 1. 在头部添加结点 2. 在尾部添加结点 3. 遍历 4. 逆置 5. 删除
使用 Eclipse、Maven、JUnit、SonarQube 和 JaCoCo 使用 Java 实现双向链表。 嵌套类摘要 private class DLNode 现场总结 - DLNode<T> first - DLNode<T> last 构造函数总结 + DLList() 方法总结 + boolean ...
Java 有序 非循环 双向 链表 算法 实例
相信大家都明白 LinkedList 是基于双向链表而实现的,本篇文章主要讲解一下双向链表的实现,并且我们参考 LinkedList 自己实现一个单链表尝试一下。 什么是链表? 简单的来讲一下什么是链表:首先链表是一种线性的...
使用java语言实现双向链表,提供测试用例说明功能
操作系统c++编程实现安全型双向链表,线程的创建,利用线程对链表进行增删改操作,并检验结果是否正确
自定义的双向链表 博文链接:https://hiliangliang1130-126-com.iteye.com/blog/1144023
JAVA实现链表,双向链表.pdf
Java算法实例-双向链表操作,封装性高,考试、学习都可使用
双端链表和双向链表Java代码
* 基于双向链表实现双端队列结构 */ package dsa; public class Deque_DLNode implements Deque { protected DLNode header;//指向头节点(哨兵) protected DLNode trailer;//指向尾节点(哨兵) protected ...
基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,需要将关键字...为了尽可能少的消耗复制时占用的空间,桶的数据结构选择链表,为了构造队列,选择使用双向列表。
已知N个人(以编号1,2,3...n分别表示)围成一个圈。 从编号为K的人开始报数,数到M的那个人出列,他的下一个人又从1开始报数,依照此规律重复下去,直到圆圈中的人全部出列。 问题:请打印出这N个的...双向链表实现的