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双向链表实现的更多相关文章

  1. JAVA双向链表

    1.链表是一种重要的数据结构,在程序设计中占有很重要的地位 2.我们可以用类List来实现链表结构,用变量Head.Tail.Length.Pointer来实现表头.存储当前结点的指针时有一定的技 巧 ...

  2. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  3. JAVA单向/双向链表的实现

    一.JAVA单向链表的操作(增加节点.查找节点.删除节点) class Link { // 链表类 class Node { // 保存每一个节点,此处为了方便直接定义成内部类 private Str ...

  4. 数组、单链表和双链表介绍 以及 双向链表的C/C++/Java实现

    概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...

  5. 大话数据结构(八)Java程序——双向链表的实现

    线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...

  6. 线性链表的双向链表——java实现

    .线性表链式存储结构:将采用一组地址的任意的存储单元存放线性表中的数据元素. 链表又可分为: 单链表:每个节点只保留一个引用,该引用指向当前节点的下一个节点,没有引用指向头结点,尾节点的next引用为 ...

  7. Java中双向链表的代码实现

    写在前面: 双向链表是一种对称结构,它克服了单链表上指针单向性的缺点,其中每一个节点即可向前引用,也可向后引用,这样可以更方便的插入.删除数据元素. 由于双向链表需要同时维护两个方向的指针,因此添加节 ...

  8. 双向链表--Java实现

    /*双向链表特点: *1.每个节点含有两个引用,previos和next,支持向前或向后的遍历(除头节点) *2.缺点插入或删除的时候涉及到引用修改的比较多 *注意:下面的双向链表其实也实现了双端链表 ...

  9. JAVA实现双向链表的增删功能

    JAVA实现双向链表的增删功能,完整代码 package linked; class LinkedTable{ } public class LinkedTableTest { //构造单链表 sta ...

随机推荐

  1. temorrow read

    http://blog.csdn.net/yimiyangguang1314/article/details/6268177 http://www.cnblogs.com/killmyday/arch ...

  2. 【转】SQL中Group By的使用

    1.概述 2.原始表 3.简单Group By 4.Group By 和 Order By 5.Group By中Select指定的字段限制 6.Group By All 7.Group By与聚合函 ...

  3. 优步(UBER)发布2016年春节出境游出行报告

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. SQL2008--行号的得到

    WITH DataTable AS( select *, ROW_NUMBER() OVER(order by ID) as Rowno from (select * from UserInfo) a ...

  5. [iOS基础控件 - 4.3] APP列表 xib的使用

    A.storyboard和xib 1.storyboard: 相对xib较重量级,控制整个应用的所有界面 2.xib: 轻量级,一般用来描述局部界面   B.使用 1.新建xib文件 New File ...

  6. [OC Foundation框架 - 7] NSArray的创建与遍历

    NSArray是不可变的,不能先创建再添加元素 NSArray可以放入任何OC对象,但不能放入基本数据类型.结构体.枚举等非OC对象 不能存储nil   A.常用方法1 创建 返回用量 是否含有某元素 ...

  7. 转载Entity Framework全面教程

    转载原地址:http://www.cnblogs.com/lsxqw2004/archive/2009/05/31/1495240.html#_Toc228672754 预备知识    2 LINQ技 ...

  8. Linux就是这个范儿之第一次亲密接触(3)

    原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 .作者信息和本声明.否则将追究法律责 1.4 返璞归真的命令行 有一种说法,现代计算机不是靠电力驱动,而是靠“鼠标”.多少应用程序的界面需 ...

  9. hql查询技巧

    要擅于利用对象之间映射的集合去查与其关联的对象,而不是直接在dao层重新写查询的方法,其实,hibernate正是对复杂查询的一种解放,既然有现成的东西,何必再去闭门造车,而且造出来的还是个旧车. 查 ...

  10. Hibernate的BaseDao辅助类

    1.BaseDao接口类,该类封装了一些hibernate操作数据库的一些常用的方法,包括分页查询,使用该类极大的简化了hibernate的开发 BaseDao.java package com.kj ...