数据结构之双向列表实现
来源:互联网 发布:党章党规网络测试答案 编辑:程序博客网 时间:2024/05/22 10:41
双向列表,这里无论删除还是增加都需要特别注意头节点与尾节点。
package shujujiegou;/** * Created by lcc on 2017/6/30. */public class BidirectionalList { public static void main(String[] args) { BidirectionalList list = new BidirectionalList(); list.add("shaungqi"); list.add("dadada"); list.add("dadada1111"); list.add(2, "xxx123"); list.removeLast(); System.out.println(list.getSize() + " " + list.get(2).data); list.add(1, "xxx123"); System.out.println(list.getSize() + " " + list.get(2).data); list.remove(1); System.out.println(list.getSize() + " " + list.get(0).data); } Node first; Node last; private int size; public Node get(int i) { cheackBorder(i); Node getNode = first; for (int j = 0; j < i; j++) { getNode = getNode.next; } return getNode; } public void add(Object object) { Node addNode = new Node(); addNode.data = object; if (first == null) { addNode.pre = null; addNode.next = null; first = addNode; last = addNode; } else { last.next = addNode; addNode.pre = last; addNode.next = null; last = addNode; } size++; } public void add(int i, Object object) { cheackBorder(i); Node addNode = new Node(); addNode.data = object; Node getNode = get(i); if (i == size - 1) { last.next = addNode; addNode.pre = last; addNode.next = null; last = addNode; } else { Node next = getNode.next; getNode.next = addNode; addNode.pre = getNode; next.pre = addNode; addNode.next = next; } size++; } public Node removeLast() { Node oldLast = last; Node newLast = last.pre; last.pre = null; newLast.next = null; last = newLast; size--; return oldLast; } public Node remove(int i) { cheackBorder(i); Node removeNode = get(i); if (i == 0 && size == 1) { first = null; } else if (i == 0 && size != 1) { Node next =first.next; next.pre = null; first =next; } else{ Node pre = removeNode.pre; Node next = removeNode.next; pre.next = next; next.pre = pre; } size--; return removeNode; } public void cheackBorder(int i) { if (i > size - 1) { try { throw new Exception("越界"); } catch (Exception e) { e.printStackTrace(); } } } public int getSize() { return size; } public boolean isExmpt() { return size ==0; } public class Node { Node pre; Object data; Node next; public Node() { } public Node(Node pre, Object data, Node next) { this.pre = pre; this.data = data; this.next = next; } }}
阅读全文
0 0
- 数据结构之双向列表实现
- 数据结构之双向链表的实现
- 数据结构之双向链表实现
- 动手实现 数据结构 之 “双向链表”
- 双向 列表的实现
- 双向列表实现
- 数据结构 - 双向列表与循环列表
- 数据结构之双向循环链表(C++实现)
- 数据结构之双向链表的Java实现
- 数据结构之---c语言实现双向链表操作
- 简单数据结构之双向链表(C++实现)
- 数据结构之双向链表(JAVA实现)
- 数据结构学习笔记之用Java实现双向链表
- 数据结构之循环双向链表java实现
- 数据结构之双向链表(C语言实现)
- 数据结构——练习之双向链表实现
- 数据结构之——循环双向链表的实现
- 数据结构之线性结构的离散存储(循环列表和双向链表)
- 简单解决ScrollView和ListView冲突不兼容问题
- numpy.newaxis
- TableView的cell上面加button,实现点击button可以获取到cell的行号或者indexPath
- Python机器学习应用 | 岭回归
- php字符统计
- 数据结构之双向列表实现
- linux:作业控制&作业规划进程crond
- 217. Contains Duplicate的C++解法
- css float 解析
- tools_r25.2.3-macosx
- java 通过AES+base64加密-解密
- 方法的重载和覆盖
- php文件下载(easy)
- python numpy矩阵信息,shape,size,dtype