标签:java数据结构 双向链表结构 linkedlist集合结构 双向链表结构例子 java接口
实例代码:
/**
* TwoWayLinked类
* 演示双向链表这一数据结构的实现
* @author 学霸联盟 - 赵灿
*/
public class TwoWayLinked {
// 用于存储链表的第一个节点
private Node first = null;
// 用于存储链表的最后一个节点
private Node last = null;
// 用于存储集合长度
private int size = 0;
//添加元素的方法
public void add(Object obj){
//创建节点对象
Node node = new Node();
//节点中存储添加的元素
node.element = obj;
//判断第一个节点是否为null
if (first == null) {
//第一个节点为说明是第一次添加元素
first = node;
//将第一个节点的前一个和后一个节点都设置成自己
first.pre = node;
first.next = node;
}
//判断最后一个节点是否为null
if(last == null){
/*
* 如果最后一个节点也为null时
* last和first存储的是同一个Node对象的地址
*/
last = node;
}else{
//如果最后一个节点不为null
//新创建的节点前一个节点应该是上一次的最后一个节点
node.pre = last;
//新创建的节点下一个节点存储自身
node.next = node;
//此时last中保存的还是上一次添加元素时的最后一个节点
//所以它的下一个节点应该设置为当前新建的节点
last.next = node;
//然后将last设置为当前新建的节点
last = node;
}
//添加元素,长度加1
size++;
}
/**
* 根据下标获取元素
*/
public Object get(int index) {
//首先判断传入的下标是否超出长度
if (index < size) {
/*
* 声明一个Node类型的变量tagNode,并设置为first
* 表示寻找的时候从第一个节点开始找
*/
Node tagNode = first;
for (int i = 0; i < index; i++) {
//获取下一个节点,等价于i+1
tagNode = tagNode.next;
}
//获取找到的节点中的元素
return tagNode.element;
}
//如果传入的下标大于或等于长度,返回null
return null;
}
/**
* 节点类(私有的成员内部类)
*
* @author 学霸联盟 - 赵灿
*/
private class Node {
// 自身类型的变量,用于存储前一个节点
Node pre;
// 自身类型的变量,用于存储后一个节点
Node next;
// Object类型的变量,用于存储元素
Object element;
}
}
/**
* TwoWayLinkedTest类
* 用于测试双向链表
* @author 学霸联盟 - 赵灿
*/
public class TwoWayLinkedTest {
public static void main(String[] args) {
//创建双线链表的对象
TwoWayLinked twl = new TwoWayLinked();
//向链表中添加值
twl.add(1);
twl.add(2);
twl.add(3);
twl.add(4);
//获取下标为2的值
Object element = twl.get(2);
//输出值
System.out.println(element);
}
}
运行结果:
3版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:java数据结构 双向链表结构 linkedlist集合结构 双向链表结构例子 java接口
原文地址:http://blog.csdn.net/ixueba/article/details/47447359