【JAVA数据结构】双向链表
来源:互联网 发布:linux常用命令实例详解 编辑:程序博客网 时间:2024/06/14 00:40
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点
下面直接来看实现:
/** * <p>双向链表实现(先进后出)</p> * @author white * @version $Id: MyLinkedList, v 0.1 2016/9/21 0021 下午 8:32 white Exp $ */public class MyLinkedList<T> { /** 栈顶元素 */ private Node first; /** 栈底元素 */ private Node last; /** 链表大小 */ private int size = 0; /** 双向链表结构 */ private class Node { T item; Node next; Node prev; } /** * 链表是否为空 * @return */ public boolean isEmpty() { return size == 0; } /** * 将元素压入栈顶 * @param item */ public void push(T item) { if (size == 0) { first = new Node(); first.item = item; last = first; size++; } else if (size > 0) { Node oldFirst = first; first = new Node(); first.item = item; first.next = oldFirst; oldFirst.prev = first; last = oldFirst; size++; } } /** * 取出链表的第一个元素 * @return */ public T pop() { if (size == 0) { throw new ArrayIndexOutOfBoundsException(); }else if (size == 1){ Node oldFirst = first; first = null; size--; return oldFirst.item; }else { Node oldFirst = first; first = first.next; first.prev = null; size--; return oldFirst.item; } } /** * 取栈深度 * @return */ public int size() { return size; }}
调用以下方法来查看结果:
public void test() { MyLinkedList<String> myLinkedList = new MyLinkedList<String>(); System.out.println("cosSize:" + myLinkedList.size()); for (int i = 0; i < 15; i++) { myLinkedList.push("aaa" + i); } System.out.println("initSize:" + myLinkedList.size()); for (int i = 0; i < 15; i++) { System.out.println(myLinkedList.pop()); } System.out.println("popSize:" + myLinkedList.size()); }
输出结果:
cosSize:0initSize:15aaa14aaa13aaa12aaa11aaa10aaa9aaa8aaa7aaa6aaa5aaa4aaa3aaa2aaa1aaa0popSize:0
如有疑问,欢迎提出。
我的博客:blog.scarlettbai.com
0 0
- 【JAVA数据结构】双向链表
- Java数据结构--双向链表
- 使用java实现双向链表数据结构
- java 实现双向链表(数据结构)
- 数据结构--java实现双向链表
- java数据结构 四(双向链表)
- 数据结构--双向链表实现(java)
- Java 数据结构之双向链表
- java数据结构(双向链表)
- Java数据结构之双向链表
- java数据结构与算法-双向链表
- 数据结构--双向链表
- 数据结构-双向链表
- 数据结构-----双向链表
- 数据结构-双向链表
- 【数据结构】双向链表
- 双向链表 - 数据结构
- 数据结构--双向链表
- leetcode---Path Sum II---回溯
- 在ubuntu14.04上安装cuda时会遇到的几个问题
- Tablayout的简单使用
- 【android】R cannot be resolved to a variable
- PendingIntent详解
- 【JAVA数据结构】双向链表
- 欧拉路径/欧拉回路
- HQL的使用及封装的操作数据的工具类
- Windows7 下 theano + keras + cuda 机器学习环境搭建
- Android_5.0定制--------keyCode实现SystemUI导航栏音量+ - 按钮
- |洛谷|二分|P1182 数列分段Section II
- 二叉树先序、中序、后续遍历递归以及非递归java实现
- 龙虎山:免费上WIFI,江西首个全面铺设免费无线上网的景区
- Opencv Surf算子中keyPoints,描述子Mat矩阵,配对向量DMatch里都包含了哪些好玩的东东?