Java实现双链表
来源:互联网 发布:淘宝免费模板 编辑:程序博客网 时间:2024/05/01 11:09
public class DoubleLink<T> {//存放第一个指针private Node<T> firstNode;//存放最后一个指针private Node<T> lastNode;//存放链大小private int size;//构造函数public DoubleLink() {}// --------------------------------add()系列----------------------------------public void addFirst(T data) {linkFirst(data);}public void addLast(T data) {linkLast(data);}public void add(T data) {linkLast(data);}public void linkFirst(T data) {Node f = this.firstNode;Node newNode = new Node<T>(data, f, null);this.firstNode = newNode;if (f == null) {// 1 如果等于空,说明他没有前一个Node// 2 如果等于空,说明这是一张空链表,所以此时,this.lastNode=newNode,即:链的最后一个和第一个重合this.lastNode = this.firstNode;} else {// 1 如果不等于空,说明存在firsrNode链表f.prev = this.firstNode;}this.size++;}public void linkLast(T data) {if (this.firstNode == null) {linkFirst(data);return;}// 如果链中不是为空,那么就有firstNode,lastNodeNode newNode = new Node<T>(data, this.lastNode, null);this.lastNode.next = newNode;this.lastNode = newNode;this.size++;}// --------------------------------remove()系列--------------------------------public T removeFirst() {if (this.firstNode == null) {return null;}//记录返回数据T data = this.firstNode.data;// 删除过程Node nowFirstNode = this.firstNode.next;//先将原先fisrtNode中的数据清空this.firstNode.data=null;this.firstNode.next=null;if (nowFirstNode == null) {//如果为空,说明链中只有1个元素//将引用置空this.firstNode=null;this.lastNode = null;} else {this.firstNode = nowFirstNode;}// 将被删除的元素返回this.size--;return data;}public T removeLast() {if (this.firstNode == null) {return null;}T t=this.lastNode.data;Node nowLastNode = this.lastNode.prev;this.lastNode.data=null;this.lastNode.prev=null;this.lastNode=null;if (nowLastNode == null) {// 如果等于空, 那说明这张链中只有一个元素,即:this.firstNode 和 this.lastNode 都是指向同一个内存地址// 让垃圾回收机制,回收这些没有引用的垃圾(原先被firstNode 中的 data--->"内容1" next---->"内容2"// prev-->"内容3")this.firstNode=null;} else {//如果不等于空, 那就说明链表中存在》=2以上的元素个数//清除this.lastNode 中 data ,prev ;nowLastNode.next=null;this.lastNode = nowLastNode;}this.size--;return t;}public T remove() {return removeLast();}// --------------------------------get()系列----------------------------------public T get(int index) {if (index < 0 || index >= this.size) {throw new RuntimeException("下标: ‘" + index + "’ 溢出!");}Node node = firstNode;for (int i = 0; i < index; i++) {node = node.next;}return (T) node.data;}public void show() {Node node = this.firstNode;while (node != null) {System.out.println(node.data + "\t");node = node.next;}}public Node<T> getFirstNode() {return firstNode;}public Node<T> getLastNode() {return lastNode;}class Node<T> {Node next;Node prev;T data;Node(T data, Node prev, Node next) {this.data = data;this.prev = prev;this.next = next;}}public int getSize() {return this.size;}}
0 0
- JAVA双链表的实现
- Java双链表的实现
- Java实现双链表
- java 实现双链表
- java实现双链表
- Java实现 双链表
- Java双链表的实现
- 双链表java实现(二)
- Java实现单链表和双链表
- Java实现二叉树、 双链表
- Java实现单链表和双链表
- Java实现
- java实现
- java实现排列组合实现
- 实现缓存 java实现
- 线性表--双链表实现方式 (JAVA)
- 基于双链表 实现Java Queue队列
- 二叉排序树转化为顺序双链表 JAVA实现
- Nexus 教程
- int const *p \ const int *p \ const int * const p 解析
- 批量更改文件后缀
- UITabbar 中的 item的字体颜色 item点击后的tint颜色 和图片颜色的修改
- 树状数组的大概理解
- Java实现双链表
- C++ Primer Plus学习笔记:第二章
- pku 1845
- 让footer固定在对底端的两种方式
- 2014新生暑假个人排位赛02
- linux 系统crunchbang的安装
- JavaLearning:单例设计模式
- Java输出流的选择
- Oracle内存结构(之三)