//=================================================
// File Name : DoublyLinked_demo
//------------------------------------------------------------------------------
// Author : Common //类名:DoublyLinkedList
//属性:
//方法:
class DoublyLinkedList{ //双向链表
private Link_long first;
private Link_long last; public DoublyLinkedList(){ //构造函数
this.first = null;
this.last = null;
} public boolean isEmpty(){
return first==null;
} public void insertFirst(long dd){ //从链表的头开始插入
Link_long newLink = new Link_long(dd);
if(isEmpty()){
last = newLink; //不用改变first
}else{
first.previous = newLink; //插入新的元素
}
newLink.next = first; //插入新的元素
first = newLink; //修改first的位置
} public void insertLast(long dd){ //从链表的尾开始插入
Link_long newLink = new Link_long(dd);
if(isEmpty()){
first = newLink; //不用改变last
}else{
last.next = newLink; //在last后面添加新元素,并修改last的位置
newLink.previous = last;
}
last = newLink; //注意:只有一个元素的时候,插入要把last也赋为newLink
} public Link_long deleteFirst(){ //从链表的头删除一个元素
Link_long temp = first; //暂存first
if(first.next == null){ //如果只有一个元素,把last也赋为null
last = null;
}else{
first.next.previous = null;
}
first = first.next; //把next设为first
return temp; //返回原来的first
} public Link_long deleteLast(){ //从链表的头删除一个元素
Link_long temp = last; //暂存last
if(first.next == null){ //如果只有一个元素,把first也赋为null
first = null;
}else{
last.previous.next = null;
}
last = last.previous; //把previous设为last
return temp; //返回原来的last
} public boolean insertAfter(long key,long dd){ //在特定元素后面插入
Link_long current = first;
while(current.dData != key){
current = current.next;
if(current == null){
return false;
}
}
Link_long newLink = new Link_long(dd); if(current == last){
newLink.next = null;
last = newLink;
}else{
newLink.next = current.next;
current.next.previous = newLink;
}
newLink.previous = current;
current.next = newLink;
return true;
} public Link_long deleteKey(long key){ //删除指定元素
Link_long current = first;
while(current.dData != key){
current = current.next;
if(current == null){
return null;
}
}
if(current == first){ //如果第一个元素匹配,则删除,并把first向后移动
first = current.next;
}else{
current.previous.next = current.next; //改变current上一个元素的next的指向
}
if(current == last){
last = current.previous; //如果最后一个元素匹配,则删除,并把previous向前移动
}else{
current.next.previous = current.previous; //改变current后一个元素的previous的指向
}
return current;
} public void displayForward(){
System.out.println("List(first-->last):");
Link_long current = first; //用于不断改变位置实现遍历
while(current != null){
current.displayLink();
current = current.next;
}
} public void displayBackward(){
System.out.println("List(last-->first):");
Link_long current = last; //用于不断改变位置实现遍历
while(current != null){
current.displayLink();
current = current.previous;
}
} } //主类
//Function : DoublyLinked_demo
public class DoublyLinked_demo { public static void main(String[] args) {
// TODO 自动生成的方法存根
DoublyLinkedList theList = new DoublyLinkedList(); theList.insertFirst(40);
theList.insertFirst(30);
theList.insertFirst(20);
theList.insertFirst(10);
theList.displayForward();
theList.displayBackward(); theList.insertAfter(20, 25);
theList.displayForward();
theList.displayBackward(); theList.deleteFirst();
theList.displayForward(); theList.deleteKey(20);
theList.displayForward();
} }

Java数据结构——双向链表的更多相关文章

  1. Java数据结构--双向链表的实现

    #java学习经验总结------双向链表的实现 双向链表的建立与单链表类似,只是需要使用pre指针指向前一个结点,并且在删除添加时不仅仅考虑next package datastructure; p ...

  2. Java数据结构之线性表

    从这里开始将要进行Java数据结构的相关讲解,Are you ready?Let's go~~ java中的数据结构模型可以分为一下几部分: 1.线性结构 2.树形结构 3.图形或者网状结构 接下来的 ...

  3. Java数据结构和算法 - 链表

    Q: 为什么要引入链表的概念?它是解决什么问题的? A: 数组作为数据存储结构有一定的缺陷,在无序数组中,搜索是低效的:而在有序数组中,插入效率又很低:不管在哪一个数组中删除效率都很低:况且一个数组创 ...

  4. (6)Java数据结构-- 转:JAVA常用数据结构及原理分析

    JAVA常用数据结构及原理分析  http://www.2cto.com/kf/201506/412305.html 前不久面试官让我说一下怎么理解java数据结构框架,之前也看过部分源码,balab ...

  5. Java简单双向链表实现 @version 1.0

    package com.list; /** * 数据结构和算法Java表示 双向链表 * * @version 1.0 * @author 小明 * */ public class MyDoublel ...

  6. Java数据结构和算法(一)线性结构

    Java数据结构和算法(一)线性结构 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 线性表 是一种逻辑结构,相同数据类型的 ...

  7. 一文掌握关于Java数据结构所有知识点(欢迎一起完善)

    在我们学习Java的时候,很多人会面临我不知道继续学什么或者面试会问什么的尴尬情况(我本人之前就很迷茫).所以,我决定通过这个开源平台来帮助一些有需要的人,通过下面的内容,你会掌握系统的Java学习以 ...

  8. Java数据结构和算法(四)--链表

    日常开发中,数组和集合使用的很多,而数组的无序插入和删除效率都是偏低的,这点在学习ArrayList源码的时候就知道了,因为需要把要 插入索引后面的所以元素全部后移一位. 而本文会详细讲解链表,可以解 ...

  9. Java数据结构之队列的实现以及队列的应用之----简单生产者消费者应用

    Java数据结构之---Queue队列 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在 ...

随机推荐

  1. linux系统数据落盘之细节

      本文节选自这里,原文以mysql innodb系统为例,介绍了数据经过的各层级的buffer和cache,其它系统也有相似的原理,摘录于此. 3.  VFS层 该层的缓冲都放在主机内存中,它的目的 ...

  2. [转]xml文件中的转义字符

    原文地址:http://www.cnblogs.com/zhxhdean/archive/2012/02/08/2342498.html 如果在XML文档中使用类似"<" 的 ...

  3. java基础语法要点<二>(基于1.8)

    注解(元数据) 从jdk5 开始,java支持在源文件中嵌入补充信息,称为注释(annotation).注释不会改变程序的动作,也就不会改变程序的语义.但在开发和部署期间,各种工具可以使用这类信息.元 ...

  4. 在浏览器中输入URL后执行的全部过程的个人总结

    这个问题经常可以看到,今天我好好总结了下,是从网络模型的角度来分析问题的,主要涉及应用层:DNS,HTTP,传输层:TCP,网络层:IP和路由选择协议:RIP,OSPF(内部网关协议),BGP(外部网 ...

  5. 初识React

    React 是Facebook开源的一个用于构建用户界面的Javascript库,已经 应用于Facebook及旗下Instagram React专注于MVC架构中的V,即视图 React引入了 虚拟 ...

  6. win7下安装redies

    https://github.com/MSOpenTech/redis 打开以后,可以直接使用浏览器下载,或者git克隆.注意:下载release版 解压后,目录下有以下这些文件: redis-ben ...

  7. javaweb项目打包成war包

    从来没有想过web项目还能打包的,但是有要求,就不得不去实现,在网上找了一下,发现挺简单的. 首先是使用MyEclipse将web项目打包,如下图所示. 右键选中项目,选择export. 然后选择J2 ...

  8. VS2008 查找 替换对话框无法打开的解决方法

    1.今天碰到了这个窗口打不开的问题.醉了 解决方案: 窗口->重置窗口布局.

  9. css选择器([class*=" icon-"], [class^=icon-] 的区别)

    官方解释: [attribute^=value],a[src^="https"],选择其 src 属性值以 "https" 开头的每个 <a> 元素 ...

  10. PHP数组/Hash表的实现/操作、PHP变量内核实现、PHP常量内核实现 - [ PHP内核学习 ]

    catalogue . PHP Hash表 . PHP数组定义 . PHP变量实现 . PHP常量实现 1. PHP Hash表 0x1: 基本概念 哈希表在实践中使用的非常广泛,例如编译器通常会维护 ...