`

Java 双向链表

 
阅读更多

/**

 * 双向链表

 *

 */

public class TwoWayLinkedList {

private Node head;

private Node tail;

private int size;

 

private class Node {

private Object data;

private Node next;

private Node pre;

 

public Node (Object data) {

this.data = data;

}

}

 

public TwoWayLinkedList() {

size = 0;

head = null;

tail = null;

}

 

//添加头部节点

public void addHead(Object data) {

Node node = new Node(data);

if(size == 0) {

head = node;

tail = node;

size ++;

}else {

head.pre = node;

node.next = head;

head = node;

size++;

}

}

 

//添加尾部节点

public void addTail(Object data) {

Node node = new Node(data);

if(size == 0) {

head = node;

tail = node;

size++;

}else {

node.pre = tail;

tail.next = node;

tail = node;

size++;

}

}

 

//删除链表头

public Node deleteHead() {

Node temp = head;

if(size != 0) {

head = head.next;

head.pre = null;

size--;

}

return temp;

}

 

//删除链表尾

public Object deleteTail() {

Node temp = tail;

if(size != 0) {

tail = tail.pre;

tail.next = null;

size--;

}

return temp;

}

 

//获得链表的节点个数

public int getSize(){

return size;

}

 

//判断链表是否为空

public boolean isEmpty(){

return (size == 0);

}

 

public void display() {

if(size > 0) {

Node node = head;

int tempSize = size;

if(tempSize == 1) {

System.out.println("["+node.data+"]");

return;

}

while(tempSize > 0) {

if(node.equals(head)) {

System.out.print("["+node.data+"->");

}else if(node.next == null) {

System.out.print(node.data+"]");

}else {

System.out.print(node.data+"->");

}

node = node.next;

tempSize--;

}

System.out.println();

}else {

System.out.println("[]");

}

}

}

 

测试:

public class TestTwoWayLinkedList {

 

@Test

public void testTwoWayLinkedList() {

TwoWayLinkedList link = new TwoWayLinkedList();

link.addHead("A");

link.addHead("B");

link.addHead("C");

link.addHead("D");

link.addTail("E");

link.addTail("F");

link.addTail("G");

link.display();

link.deleteHead();

link.display();

link.deleteTail();

link.display();

}

 

}

 

结果;

[D->C->B->A->E->F->G]

[C->B->A->E->F->G]

[C->B->A->E->F]

 

分享到:
评论

相关推荐

    JAVA双向链表反转实现

    在Java编程中,双向链表(Double Linked List)是一种数据结构,它允许我们在列表的任一侧进行插入和删除操作。与单向链表不同,双向链表中的每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点。这...

    Java双向链表的实现

    下面我们将详细讲解如何实现一个自定义的Java双向链表,并参考提供的`LinkNode.java`文件来理解其内部机制。 首先,我们需要定义一个表示链表节点的类`LinkNode`。这个类通常包含三个属性:存储数据的`data`字段、...

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    Java实现双向链表

    用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。

    Java算法实例-双向链表操作

    本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,这使得在链表中的...

    JAVA实现链表_双向链表

    JAVA实现链表_双向链表

    数据结构Java双向链表PPT学习教案.pptx

    在实际编程中,例如在Java环境中,我们可以利用双向链表实现学生信息管理程序。每个节点代表一个学生的信息,包含学生的ID、姓名、成绩等属性,通过链表的插入和删除操作来实现学生的添加和移除,查询操作则可以用于...

    Java实现双向链表(两个版本)

    主要介绍了Java实现双向链表(两个版本)的相关资料,需要的朋友可以参考下

    双向链表实现约瑟夫环

    已知N个人(以编号1,2,3...n分别表示)围成一个圈。 从编号为K的人开始报数,数到M的那个人出列,他的下一个人又从1开始报数,依照此规律重复下去,直到圆圈中的人全部出列。 问题:请打印出这N个的...双向链表实现的

    Java有序非循环双向链表算法实例

    在Java编程中,有序非循环双向链表是一种重要的数据结构,它在许多复杂的数据操作和算法实现中扮演着核心角色。有序意味着链表中的元素按照特定的顺序排列,非循环则表示链表的首节点和尾节点之间没有链接,使得遍历...

    双端链表和双向链表Java代码

    本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...

    在双向链表上实现快速排序的递归算法

    在双向链表上实现快速排序的递归算法 输入的形式:元素个数、元素都为整型。 输入值范围:元素个数为非负正整数,需要排序的元素都为整型。 输出的形式:排序前的元素序列和排序后的元素序列。 程序的功能:对用户...

    用java实现双向链表操作

    用java实现双向链表的完整操作,主要用到内部类实现。

    双向链表双向链表双向链表

    在Java中,`java.util.LinkedList`类也是基于双向链表实现的。这些高级语言的内置数据结构封装了底层的指针操作,使得开发者可以更专注于逻辑处理,而不是底层实现。 总的来说,双向链表是一种非常重要的数据结构,...

    单链表双向链表java实现

    在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...

    双向链表(java实现)

    在Java中实现双向链表,我们通常会创建一个表示链表节点的类(如`Node`),以及一个表示链表本身的类(如`MyLinkedList`)。`Node`类包含数据和两个引用,分别用于指向前一个节点和后一个节点。`MyLinkedList`类则...

    doublelink.zip_DoubleLink java_双向链表实现

    在本文中,我们将深入探讨如何使用Java编程语言实现一个高效的双向链表数据结构,并通过测试用例进行验证。首先,让我们了解双向链表的基本概念。 双向链表是一种线性数据结构,其中每个节点包含两个指针,分别指向...

    二叉树转换为双向链表

    二叉树转换为双向链表 通过随机创建二叉排序树测试二叉树转换为双向链表是否正确 http://blog.csdn.net/ssuchange/article/details/17383625

    java 实现双向链表实例详解

    Java 实现双向链表实例详解 Java 实现双向链表实例详解是一种基本的数据结构,在 Java 中 LinkedList 已经实现了这种结构,但是作为开发者,也要拥有自己显示这种结构的能力。双向链表是一种动态的数据结构,它可以...

Global site tag (gtag.js) - Google Analytics