1. package com.list;
  2.  
  3. /**
  4. * 数据结构和算法Java表示 双向链表
  5. *
  6. * @version 1.0
  7. * @author 小明
  8. *
  9. */
  10. public class MyDoublelinkedlist {
  11. private DoubleNode head;// 头结点
  12. private DoubleNode end;// 尾结点
  13. private int size;// 长度
  14. // 构造函数
  15.  
  16. public MyDoublelinkedlist() {
  17. head = null;// 头结点
  18. end = null;// 尾结点
  19. size = 0;// 长度为0
  20. }
  21.  
  22. // 重写toString方法
  23. @Override
  24. public String toString() {
  25. DoubleNode temp = head;// 将头结点赋值给temp变量
  26. String str = " ";
  27. for (; temp != null;) {
  28. str += temp.getElement() + " ";// 字符串拼接
  29. temp = temp.getNext();// temp结点后移
  30. }
  31. str = "[" + str + " ]";
  32. return str;
  33. }
  34.  
  35. // 插入方法,默认插入在链表的尾端
  36. public void add(DoubleNode dn) {
  37. if (size == 0) {// 长度为0,表为空,插入在表首
  38. head = dn;// 头结点被赋值
  39. end = dn;// 尾结点被赋值
  40. size++;// 长度加一
  41. } else {// 长度不为0,表不为空时,插入至表的最后一位
  42. end.setNext(dn);// 表尾的后继为插入元素
  43. dn.setPrev(end);// 插入元素的前驱为head
  44. end = dn;// 重新赋值表尾
  45. size++;
  46. }
  47. }
  48.  
  49. // 插入方法,插入到指定的位置
  50. public void add(int index, DoubleNode dn) throws IndexException {
  51. DoubleNode temp = head;
  52. if (index <= 0 || index > size + 1) {// 插入位置不合理
  53. throw new IndexException("插入索引位置不合理");
  54. } else {// 插入位置合理
  55. if (size == 0) {// 表为空时,调用add默认函数来实现插入首位
  56. add(dn);
  57. return;
  58. }
  59. if (index == 1) {// 表不为空时插入位置在头结点
  60. head.setPrev(dn);// 设置头结点的前驱
  61. dn.setNext(head);// 设置新的头结点的后继
  62. head = dn;// 设置新的头结点
  63. size++;// 长度加一
  64. } else {// 索引合理,插入位置不在头结点
  65. if (index == size + 1) {// 插入索引在尾结点
  66. add(dn);// 使用默认add函数插入表尾
  67. return;
  68. } else {// 索引合理,插入不在头结点也不再尾结点
  69. for (int i = 1; i < index - 1; i++) {
  70. temp = temp.getNext();// 移至目标位置的前一位
  71. }
  72. dn.setNext(temp.getNext());// 完成插入节点的后继
  73. dn.setPrev(temp);// 完成插入节点的前驱
  74. temp.getNext().setPrev(dn);// 设置插入节点的后继的前驱
  75. temp.setNext(dn);// 完成插入节点的前驱的后继
  76. size++;// 长度加一
  77. }
  78. }
  79. }
  80. }
  81.  
  82. /*
  83. * 删除函数
  84. */
  85. public void remove(int index) throws IndexException {
  86. DoubleNode temp = head;
  87. if (index <= 0 || index > size) {// 移除位置不合理
  88. throw new IndexException("删除位置不合理");
  89. } else {// 删除位置合理
  90. if (size == 0) {
  91. throw new IndexException("表为空无法删除");
  92. } else {// 删除位置合理且表不位空
  93. if (index == 1) {// 删除位置为头节点
  94. head.getNext().setPrev(null);// 设置新的节点为null
  95. head = head.getNext();// 设置新的节点
  96. size--;// 长度减一
  97. } else {// 删除位置合理且表不位空且删除位置不在头结点
  98. if (size == index) {// 删除位置合理且表不位空且删除位置不在头结点在尾结点
  99. for (; temp.getNext() != end;) {
  100. temp = temp.getNext();// 后移至倒数第二个结点
  101. }
  102. temp.setNext(null);// 删除表尾
  103. end = temp;// 新的表尾
  104. size--;// 长度减一
  105. } else {// 删除位置合理且表不位空且删除位置不在头结点也不再尾结点
  106. for (int i = 1; i < index - 1; i++) {
  107. temp = temp.getNext();
  108. }
  109. temp.setNext(temp.getNext().getNext());// 设置新的后继
  110. temp.getNext().setPrev(temp);// 设置新的前驱
  111. size--;// 长度减一
  112. }
  113. }
  114. }
  115.  
  116. }
  117. }
  118.  
  119. public static void main(String[] args) throws IndexException {
  120. MyDoublelinkedlist dl = new MyDoublelinkedlist();
  121. dl.add(new DoubleNode(1));
  122. dl.add(new DoubleNode(2));
  123. dl.remove(1);
  124. System.out.println(dl);
  125. }
  126. }
  127.  
  128. /*
  129. * 双向链表的结点 一个值域,两个指针域
  130. */
  131. class DoubleNode<T> {
  132. private T element;// 值域
  133. private DoubleNode prev;// 前驱
  134. private DoubleNode next;// 后继
  135. // 构造函数
  136.  
  137. public DoubleNode(T t) {
  138. element = t;
  139. prev = null;
  140. next = null;
  141. }
  142.  
  143. public void setPrev(DoubleNode dn) {
  144. prev = dn;
  145. }
  146.  
  147. public void setNext(DoubleNode dn) {
  148. next = dn;
  149. }
  150.  
  151. public DoubleNode getPrev() {
  152. return prev;
  153. }
  154.  
  155. public DoubleNode getNext() {
  156. return next;
  157. }
  158.  
  159. public T getElement() {
  160. return element;
  161. }
  162. }

Java简单双向链表实现 @version 1.0的更多相关文章

  1. 版本问题 Java:Unsupported major.minor version 51.0 (unable to load class . . .

    导入别人的项目时报错  Java:Unsupported major.minor version 51.0 (unable to load class . . . 后发现错误是由于class编译器的J ...

  2. [java] Unsupported major.minor version 51.0 错误解决方案

    jdk1.6工程中使用外部jar包中类出现:Unsupported major.minor version 51.0原因分析:出现上述错误是因为:外部jar包使用jdk1.7(jdk7)编译,而使用此 ...

  3. java unsupported major.minor version 51.0 解决

    1.概述 出现如题所述异常 是因为jdk高版本 编译后的class文件 运行在低版本的jre环境下(如jdk7编译 运行在jdk6环境下) 2. 解决方案 在eclipse等ide中重新编译 指定编译 ...

  4. java运行报错 has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

    解决方法: 解决办法: 在项目的属性里设置jdk版本,方法是右击项目-->properties-->java compiler --> Enable project specific ...

  5. (class file version 53.0), Java Runtime versions up to 52.0错误的解决方法

    遇到这个错误是在Apache Tomcat上部署应用程序的时候遇到的,具体的错误描述是: java.lang.UnsupportedClassVersionError: HelloWorld has ...

  6. [JAVA] 一个可以编辑、编译、运行Java简单文件的记事本java实现

    本来是Java课做一个仿windows记事本的实验,后来突然脑子一热,结果就给它加了一个编译运行Java文件的功能. 本工程总共大约3000行代码,基本上把所学的java界面.文件.控件的功能都包含在 ...

  7. Java单链表简单实现* @version 1.0

    package com.list; /** * 数据结构与算法Java表示 * @version 1.0 * @author 小明 * */ public class MyLinkedList { p ...

  8. java程序无法启动:Unsupported major.minor version 51.0

    今天在sae上部署了一个项目,结果总是出现503错误:service unavailable,然后jvm出现了一大串错误日志,如下 JAVA_SAE_Fatal_error: Failed start ...

  9. Java运行 Unsupported major.minor version 51.0 错误

    今天写了简单的Java程序,运行的时候不知道为啥出现这个问题 happy@happy-HP-Compaq-dx7518-MT:~/Study/CrazyJava$ java FieldTest Exc ...

随机推荐

  1. [poj 2453] An Easy Problem

    An Easy Problem Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8371   Accepted: 5009 D ...

  2. Utils--前台调用后台接口工具类

    Utils--前台调用后台接口工具类 package com.taotao.manage.httpclient; import java.io.IOException; import java.net ...

  3. iOS 时间校准解决方案

    背景 在 iOS 开发中,凡是用到系统时间的,都要考虑一个问题:对时.有些业务是无需对时,或可以以用户时间为准的,比如动画用到的时间.一些日程类应用等.但电商相关的业务大都不能直接使用设备上的时间,而 ...

  4. Oracle 12c启动时PDBs的自动打开

    Pluggable Database(PDB)为Oracle 12c中的一个重要的新特性, 但启动12c实例时并不会自动打开PDB数据库,这样,在启动实例后必须手动打开PDBs. 1. 实例启动后,手 ...

  5. springboot自动装配

    Spring Boot自动配置原理 springboot自动装配 springboot配置文件 Spring Boot的出现,得益于“习惯优于配置”的理念,没有繁琐的配置.难以集成的内容(大多数流行第 ...

  6. MySQL升级教程(CentOS)

    1.支持的升级方式 原地升级(In-Place Upgrade):直接替换二进制文件(即直接yum update/rpm -Uvh升级rpm包)数据库目录等都不变. 逻辑升级(Logical Upgr ...

  7. 在springboot中验证表单信息(六)

    构建工程 创建一个springboot工程,由于用到了 web .thymeleaf.validator.el,引入相应的起步依赖和依赖,代码清单如下: 1 2 3 4 5 6 7 8 9 10 11 ...

  8. 逆袭之旅DAY24.XIA.数组练习

    2018-07-20 08:40:19 1. public void stringSort(){ String[] s = new String[]{"George"," ...

  9. java的八大排序

    public class Sort2 { public static void main(String[] args) { Sort2 sort = new Sort2(); System.out.p ...

  10. hdu3377

    题解: 简单的插头dp 加上一个代价即可 代码: #include<cstdio> #include<cmath> #include<cstring> #inclu ...