Java双向链表实现
public class DoublyLinkList {
private class Data{
private Object obj;
private Data left = null;
private Data right = null;
Data(Object obj){
this.obj = obj;
}
}
private Data first = null;
private Data last = null;
public void insertFirst(Object obj){
Data data = new Data(obj);
if(first == null){
last = data;
}else{
data.right = first;
first.left = data;
}
first = data;
}
public void insertLast(Object obj){
Data data = new Data(obj);
if(first == null){
first = data;
}else{
data.left = last;
last.right = data;
}
last = data;
}
public boolean insertAfter(Object target,Object obj){
Data data = new Data(obj);
Data cur = first;
while(cur != null){
if(cur.obj.equals(target)){
data.right = cur.right;
data.left = cur;
if(cur == last)
last = data;
else
cur.right.left = data;
cur.right = data;
return true;
}
cur = cur.right;
}
return false;
}
public Object deleteFirst() throws Exception{
if(first == null)
throw new Exception("empty!");
Data temp = first;
if(first.right == null){
first = null;
last = null;
}else{
first.right.left = null;
first = first.right;
}
return temp;
}
public Object deleteLast() throws Exception{
if(first == null)
throw new Exception("empty!");
Data temp = last;
if(first.right == null){
first = null;
last = null;
}else{
last.left.right = null;
last = last.left;
}
return temp;
}
public Object delete(Object obj) throws Exception{
if(first == null)
throw new Exception("empty!");
Data cur = first;
while(cur != null){
if(cur.obj.equals(obj)){
if(cur == last)
last = cur.left;
else
cur.right.left = cur.left;
if(cur == first)
first = cur.right;
else
cur.left.right = cur.right;
return obj;
}
cur = cur.right;
}
return null;
}
public void display(){
System.out.print("first -> last : ");
Data data = first;
while(data != null){
System.out.print(data.obj.toString() + " -> ");
data = data.right;
}
System.out.print("\n");
}
public static void main(String[] args) throws Exception{
DoublyLinkList dll = new DoublyLinkList();
dll.insertFirst(1);
dll.insertLast(3);
dll.insertAfter(1, 2);
dll.insertAfter(3, 4);
dll.insertAfter(4, 5);
dll.display();
dll.deleteFirst();
dll.display();
dll.deleteLast();
dll.display();
dll.delete(3);
dll.display();
dll.delete(2);
dll.display();
dll.delete(4);
dll.display();
}
}
first -> last : 1 -> 2 -> 3 -> 4 -> 5 ->
first -> last : 2 -> 3 -> 4 -> 5 ->
first -> last : 2 -> 3 -> 4 ->
first -> last : 2 -> 4 ->
first -> last : 4 ->
first -> last :
Java双向链表实现的更多相关文章
- JAVA双向链表
1.链表是一种重要的数据结构,在程序设计中占有很重要的地位 2.我们可以用类List来实现链表结构,用变量Head.Tail.Length.Pointer来实现表头.存储当前结点的指针时有一定的技 巧 ...
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- JAVA单向/双向链表的实现
一.JAVA单向链表的操作(增加节点.查找节点.删除节点) class Link { // 链表类 class Node { // 保存每一个节点,此处为了方便直接定义成内部类 private Str ...
- 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
- 大话数据结构(八)Java程序——双向链表的实现
线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...
- 线性链表的双向链表——java实现
.线性表链式存储结构:将采用一组地址的任意的存储单元存放线性表中的数据元素. 链表又可分为: 单链表:每个节点只保留一个引用,该引用指向当前节点的下一个节点,没有引用指向头结点,尾节点的next引用为 ...
- Java中双向链表的代码实现
写在前面: 双向链表是一种对称结构,它克服了单链表上指针单向性的缺点,其中每一个节点即可向前引用,也可向后引用,这样可以更方便的插入.删除数据元素. 由于双向链表需要同时维护两个方向的指针,因此添加节 ...
- 双向链表--Java实现
/*双向链表特点: *1.每个节点含有两个引用,previos和next,支持向前或向后的遍历(除头节点) *2.缺点插入或删除的时候涉及到引用修改的比较多 *注意:下面的双向链表其实也实现了双端链表 ...
- JAVA实现双向链表的增删功能
JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...
随机推荐
- 记录一次Jmeter性能测试
一.引言 之前有总结过如何写Java请求测试用例类,写完测试脚本调通之后,信心满满地以为我准备好可以开始性能测试了.结果在评审测试计划的时候,当即被项目组狠狠的扇了一耳光,各种不确定的点:性能指标不明 ...
- NOIP2008 双栈队列
1. 双栈排序 (twostack.pas/c/cpp) Tom 最近在研究一个有趣的排序问题.如图所示,通过 2 个栈 S1 和 S2,Tom 希望借助 以下 4 种操作实现将输入序列升序 ...
- Docker系列(八)Kubernetes介绍
Kubernetes组件功能图 各组件说明: 节点 节点在Kubernetes由虚拟机或者实体机表示,常称为Minion,即从属主机.当一个节点加入到Kubernetes系统中时,它将会创建一个数 ...
- HDU 3488--Tour(KM or 费用流)
因为每个点只能经过一次 所以考虑拆点 这题有坑,有重边.. KM算法 把一个点拆成入点和出点 入点在X部,出点在Y步. 如果u,v之间有路径,就在X部的u点连接Y部的v点 求完美匹配. 当完美匹配的时 ...
- poj1741-Tree(树的分治)
题意:给一棵树,求树上长度小于等于k的链的数量. 题解:http://blog.csdn.net/yang_7_46/article/details/9966455 照着这个博客写的代码. 不到100 ...
- daemon not running. starting it now on port 5037 ADB server didn't ACK
adb kill-server adb start-server 显示如下 daemon not running. starting it now on port 5037 ADB server di ...
- SQLServer2005数据导入Mysql到详细教程
如果转载请注明转载地址,谢谢. SQL SERVER数据导入MYSQL目录 1.Navicat for MySQL 版本10.0.9 2.创建目标数据库 3.创建正确的SQL SERVER数据库ODB ...
- js为select添加option
<select id="shi"> function loadInfo(){ var shengId=document.getElementById("she ...
- Javascript注意事项一【防止浮点数溢出】
num = 0.1+0.2; //0.30000000000000004 a = (1+2)/10; //0.3(浮点数中的整数运算时精确的)
- 【C++深入浅出】设计模式学习之单例模式
但凡成为大家公认的模式,都是有一些不可小觑的威力,今天分享一个简单的设计模式:单例模式. 单例模式用于一些只希望有一个实例的类或者只希望执行一次的操作:校长只能有一个.老板只能有一个.用户点击弹窗只希 ...