/**
* 双向链表
*
*/
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编程中,双向链表(Double Linked List)是一种数据结构,它允许我们在列表的任一侧进行插入和删除操作。与单向链表不同,双向链表中的每个节点都有两个指针,一个指向前一个节点,另一个指向后一个节点。这...
下面我们将详细讲解如何实现一个自定义的Java双向链表,并参考提供的`LinkNode.java`文件来理解其内部机制。 首先,我们需要定义一个表示链表节点的类`LinkNode`。这个类通常包含三个属性:存储数据的`data`字段、...
本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...
用Java定义一个双向链表,实现链表的基本操作: 初始化、获取头结点、添加新元素、删除链表元素、 获取链表元素、查找链表元素、更新链表中某个元素、 判断链表是否为空、求链表元素个数、输出链表元素、清空链表。
本实例聚焦于Java中的一个重要数据结构——双向链表,它在很多场景下都有着广泛的应用。双向链表与单链表相比,其独特之处在于每个节点不仅包含指向下一个节点的指针,还包含指向前一个节点的指针,这使得在链表中的...
JAVA实现链表_双向链表
在实际编程中,例如在Java环境中,我们可以利用双向链表实现学生信息管理程序。每个节点代表一个学生的信息,包含学生的ID、姓名、成绩等属性,通过链表的插入和删除操作来实现学生的添加和移除,查询操作则可以用于...
主要介绍了Java实现双向链表(两个版本)的相关资料,需要的朋友可以参考下
已知N个人(以编号1,2,3...n分别表示)围成一个圈。 从编号为K的人开始报数,数到M的那个人出列,他的下一个人又从1开始报数,依照此规律重复下去,直到圆圈中的人全部出列。 问题:请打印出这N个的...双向链表实现的
在Java编程中,有序非循环双向链表是一种重要的数据结构,它在许多复杂的数据操作和算法实现中扮演着核心角色。有序意味着链表中的元素按照特定的顺序排列,非循环则表示链表的首节点和尾节点之间没有链接,使得遍历...
本主题主要关注两种特殊类型的链表——双端链表(Double-ended LinkedList)和双向链表(Bidirectional LinkedList),并以Java语言实现为例进行讲解。 双端链表,也称为双链表,是一种允许在链表的两端进行插入和...
在双向链表上实现快速排序的递归算法 输入的形式:元素个数、元素都为整型。 输入值范围:元素个数为非负正整数,需要排序的元素都为整型。 输出的形式:排序前的元素序列和排序后的元素序列。 程序的功能:对用户...
用java实现双向链表的完整操作,主要用到内部类实现。
在Java中,`java.util.LinkedList`类也是基于双向链表实现的。这些高级语言的内置数据结构封装了底层的指针操作,使得开发者可以更专注于逻辑处理,而不是底层实现。 总的来说,双向链表是一种非常重要的数据结构,...
在这个话题中,我们将深入探讨两种基本的线性数据结构——单链表和双向链表,并通过Java语言来实现它们。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据域和指针域。数据域存储实际的数据...
在Java中实现双向链表,我们通常会创建一个表示链表节点的类(如`Node`),以及一个表示链表本身的类(如`MyLinkedList`)。`Node`类包含数据和两个引用,分别用于指向前一个节点和后一个节点。`MyLinkedList`类则...
在本文中,我们将深入探讨如何使用Java编程语言实现一个高效的双向链表数据结构,并通过测试用例进行验证。首先,让我们了解双向链表的基本概念。 双向链表是一种线性数据结构,其中每个节点包含两个指针,分别指向...
二叉树转换为双向链表 通过随机创建二叉排序树测试二叉树转换为双向链表是否正确 http://blog.csdn.net/ssuchange/article/details/17383625
Java 实现双向链表实例详解 Java 实现双向链表实例详解是一种基本的数据结构,在 Java 中 LinkedList 已经实现了这种结构,但是作为开发者,也要拥有自己显示这种结构的能力。双向链表是一种动态的数据结构,它可以...