packagecom.aclie.dataStructe4.sqeList;public classMyDoubleLinkList {private int length =0;//当前长度

private Node head;//头结点

private Node tail;//当前结点结点

publicMyDoubleLinkList(){

initLink();

}public voidinitLink(){

head= new Node(null);

tail= new Node(null);this.head =tail;

length++;

}//获取链表长度

public intgetSize(){returnlength;

}//判断链表是否为空

public booleangetEmpty(){return getSize()==0;

}//根据索引查找元素 从第一个有效值开始

public Node getNode(intindex){

Node p;if(index < 0 || index >length ){

System.out.println("参数错误");

}if(index < this.length/2){

p= this.head;for(int i=0; i

p=p.next;

}

}else{

p= this.tail;for(int i= length; i>index;i--){

p=p.prev;

}

}returnp;

}public Object getData(intindex){returngetNode(index).data;

}//在头结点处插入

public booleanaddHead(Object e){//前驱引用为null,后继为node

Node node = new Node(e, null, this.head);//改变头结点的前驱后继

this.head.prev =node;this.head =node;if(tail == null){

tail= this.head;

}

length++;return true;

}//在尾结点插入

public booleanaddTail(Object e){if(this.head == null){this.head = new Node(e,null,null);this.tail = this.head;

}else{

Node node= new Node(e,this.tail,null);this.tail.next =node;this.tail =node;

}

length++;return true;

}//在指定位置插入元素

public boolean addData(intindex,Object ele){if(index <0 || index > this.length){

System.out.println("参数错误");

}if(this.head == null){this.addTail(ele);//用尾插法

}else{if(index == 0){

addHead(ele);//用头插法

}else{

Node p= this.getNode(index);//要插入处的结点

Node n =p.next;

Node node= new Node(ele,p,n);//要插入的结点

n.prev =node;

p.next=node;

length++;

}

}return true;

}public void removeData(intindex){if(index < 0 || index >length){

System.out.println("参数错误");

}else{

Node del= null;if(index == 0){

del= this.head;this.head = this.head.next;this.head.prev = null;

length--;

}else if(index == (length-1)){

Node p= this.getNode(index-1);//得到要删除结点的前驱结点

del = p.next;//要删除的结点

p.next =del.next;if(del.next != null){

del.next.prev=p;

}

del.next= null;

del.prev= null;

length--;this.tail.next = null;this.tail.prev =p;this.tail =p;

}else{

Node p= this.getNode(index-1);//要删除结点的前驱结点

del = p.next;//要删除的结点

p.next =del.next;if(del.next != null){

del.next.prev=p;

}

del.prev= null;

del.next= null;

length--;

}

}

}//打印所有链表中的元素

public voidprint(){

Node current= this.head;while(current != null){

System.out.println(current.data);

current=current.next;

}

}//反向打印链表

public voidreversePrint(){

Node current= this.tail;while(current != null){

System.out.println(current.data);

current=current.prev;

}

}public static voidmain(String args[]){

MyDoubleLinkList linkList= newMyDoubleLinkList();

linkList.addHead("aaaa");//System.out.println(linkList.getData(1));

linkList.addTail("bbbb");//System.out.println(linkList.getData(3));

linkList.addData(2, "eeee");//linkList.print();

linkList.removeData(2);

linkList.print();

System.out.println(".....");

linkList.reversePrint();

}

}classNode{

Node prev;//指针域中前驱

Node next;//指针域中后继

Object data;//数据域

publicNode(Node current){

prev=current;

next=current;

}//双链表前驱后继及数字域

publicNode(Object d, Node p,Node n){this.data =d;this.prev =p;this.next =n;

}publicNode getPrev() {returnprev;

}public voidsetPrev(Node prev) {this.prev =prev;

}publicNode getNext() {returnnext;

}public voidsetNext(Node next) {this.next =next;

}

}

大话数据结构 java源代码_大话数据结构(八)Java程序——双向链表的实现相关推荐

  1. 解析java源代码_一步步解析java执行内幕

    对于任何一门语言,要想达到精通的水平,研究它的执行原理(或者叫底层机制)不失为一种良好的方式.在本篇文章中,将重点研究java源代码的执行原理,即从程 序员编写JAVA源代码,到最终形成产品,在整个过 ...

  2. the art of java 源代码_请不要再说Java中final方法比非final性能更好了

    无继承 有 static 修饰 static final static 非 final 结果 这里使用了 OpenJDK 的 JMH 基准测试工具来测试的,结果如下: 总结:你说final的性能比非f ...

  3. 兰顿蚂蚁 java源代码_兰顿蚂蚁-Java

    兰顿蚂蚁,是于1986年,由克里斯·兰顿提出来的,属于细胞自动机的一种. 平面上的正方形格子被填上黑色或白色.在其中一格正方形内有一只"蚂蚁". 蚂蚁的头部朝向为:上下左右其中一方 ...

  4. java 汇编_大话+图说:Java 汇编指令——只为让你懂

    原标题:大话+图说:Java 汇编指令--只为让你懂 前言 随着Android开发技术不断被推到新的高度,对于Android程序员来讲越来越需要具备一些对深入的基础性的技术的理解,比如说Java汇编指 ...

  5. java火山_火山代码转java源代码查看

    今天我们来研究一下火山安卓的源代码,火山安卓允许我们以本地化编程(中文代码编程)的方式来撰写安卓app,那么在生成实际要安装到安卓app的时候,它是如何进行编译处理的呢.让我们今天来一起探究一下. 首 ...

  6. 心java源代码_写了一个心形图案的java源代码,想发给朋友,朋友怎样才能像打开文档一样方便查看呢?...

    搞清楚java的运行机制你就明白了该怎么办 java源代码->java编译器生成字节码文件->java虚拟机执行字节码文件->心形图案显示 因此你要让朋友直接运行,你就要让上述过程自 ...

  7. 教学管理系统java源代码_教学管理系统java源代码.doc

    教学管理系统java源代码 教学管理系统java源代码 篇一:java学生管理系统源代码 import java.io.Serializable; public class Course implem ...

  8. 数据库管理系统设计Java源代码_《数据库应用》课程设计人事管理系统(java源代码)...

    <数据库应用>课程设计人事管理系统(java源代码) <数据库应用>课程设计人事管理系统(java源代码) <数据库应用>课程设计--人事管理系统(java源代码) ...

  9. 客栈管理系统java源代码_源码客栈项目源码分类规则

    源码客栈团队截至目前已经为Java相关课程设计.实训.毕业设计开发了很多对应的源码,为了整理这些源码我们制定了如下的分类规则,方便大家迅速定位找到合适自己的源码. 星星等级:✩✩星星数量表示难易程度, ...

最新文章

  1. ADSL上网常见错误提示
  2. gpt最大分区容量_[电脑知识]GUID(GPT)磁盘全局唯一分区表详解
  3. Linux下实现apache代理tomcat
  4. python基因差异分析_差异基因
  5. VS2008如何添加 OLE/COM 对象查看器 .
  6. yum安装Mariadb,二进制安装Mariadb
  7. linux多cpu运行python脚本,linux系统使用python获取cpu信息脚本分享
  8. IntelliJ IDEA使用技巧——关于版本控制(上)
  9. python--综合小案例--文件读取以及梳理
  10. paip.提升效率---质量控制--代码风格模板化
  11. 阿里云数据盘分区并挂载
  12. Java内存模型基础知识
  13. 开发中积累的单词800
  14. mysql锁历史记录_史上最全MySQL锁机制
  15. Spark推测执行spark.speculation
  16. win10重装系统后连不上公司服务器,Win10重装系统后网络连接不了,重装win10系统后不能上网解决方法...
  17. 安装位置php-fpm,如何查看php-fpm的安装路径
  18. 攻防世界-leaking-(详细操作)做题过程
  19. 张柏芝《影子爱人》曝剧照 亲手设浪漫爱情桥段_0
  20. 拓扑绝缘体 量子计算机,物理所预言立方对称性破缺下的新型拓扑绝缘体材料...

热门文章

  1. kafka概念使用简介注意点
  2. Android界面编程--使用活动条(ActionBar)--通过ActionBar菜单改变TextView的字体和颜色...
  3. bootstrap源码分析之Carousel
  4. SQL 批量插入有标识列的数据
  5. java 字节取位_java位 、字节 、字符的梳理
  6. vue 时间插件_Vue3 插件开发详解尝鲜版「值得收藏」
  7. swap冒泡函数java_一个冒泡排序程序,將交换数组的两个元素的功能用一个Swap()方法实现...
  8. 基于modbus协议的工业自动化网络规范_工控学堂:解读Modbus通讯协议「宜收藏」...
  9. 函数调用关系图如何画_乌鲁木齐126中一校三址关系图出炉!佳源和绿谷应该如何选择?...
  10. 【机器学习算法专题(蓄力计划)】十八、机器学习中SVM算法中的硬间隔和软间隔