package com.list;

/**
* 数据结构和算法Java表示 双向链表
*
* @version 1.0
* @author 小明
*
*/
public class MyDoublelinkedlist {
private DoubleNode head;// 头结点
private DoubleNode end;// 尾结点
private int size;// 长度
// 构造函数 public MyDoublelinkedlist() {
head = null;// 头结点
end = null;// 尾结点
size = 0;// 长度为0
} // 重写toString方法
@Override
public String toString() {
DoubleNode temp = head;// 将头结点赋值给temp变量
String str = " ";
for (; temp != null;) {
str += temp.getElement() + " ";// 字符串拼接
temp = temp.getNext();// temp结点后移
}
str = "[" + str + " ]";
return str;
} // 插入方法,默认插入在链表的尾端
public void add(DoubleNode dn) {
if (size == 0) {// 长度为0,表为空,插入在表首
head = dn;// 头结点被赋值
end = dn;// 尾结点被赋值
size++;// 长度加一
} else {// 长度不为0,表不为空时,插入至表的最后一位
end.setNext(dn);// 表尾的后继为插入元素
dn.setPrev(end);// 插入元素的前驱为head
end = dn;// 重新赋值表尾
size++;
}
} // 插入方法,插入到指定的位置
public void add(int index, DoubleNode dn) throws IndexException {
DoubleNode temp = head;
if (index <= 0 || index > size + 1) {// 插入位置不合理
throw new IndexException("插入索引位置不合理");
} else {// 插入位置合理
if (size == 0) {// 表为空时,调用add默认函数来实现插入首位
add(dn);
return;
}
if (index == 1) {// 表不为空时插入位置在头结点
head.setPrev(dn);// 设置头结点的前驱
dn.setNext(head);// 设置新的头结点的后继
head = dn;// 设置新的头结点
size++;// 长度加一
} else {// 索引合理,插入位置不在头结点
if (index == size + 1) {// 插入索引在尾结点
add(dn);// 使用默认add函数插入表尾
return;
} else {// 索引合理,插入不在头结点也不再尾结点
for (int i = 1; i < index - 1; i++) {
temp = temp.getNext();// 移至目标位置的前一位
}
dn.setNext(temp.getNext());// 完成插入节点的后继
dn.setPrev(temp);// 完成插入节点的前驱
temp.getNext().setPrev(dn);// 设置插入节点的后继的前驱
temp.setNext(dn);// 完成插入节点的前驱的后继
size++;// 长度加一
}
}
}
} /*
* 删除函数
*/
public void remove(int index) throws IndexException {
DoubleNode temp = head;
if (index <= 0 || index > size) {// 移除位置不合理
throw new IndexException("删除位置不合理");
} else {// 删除位置合理
if (size == 0) {
throw new IndexException("表为空无法删除");
} else {// 删除位置合理且表不位空
if (index == 1) {// 删除位置为头节点
head.getNext().setPrev(null);// 设置新的节点为null
head = head.getNext();// 设置新的节点
size--;// 长度减一
} else {// 删除位置合理且表不位空且删除位置不在头结点
if (size == index) {// 删除位置合理且表不位空且删除位置不在头结点在尾结点
for (; temp.getNext() != end;) {
temp = temp.getNext();// 后移至倒数第二个结点
}
temp.setNext(null);// 删除表尾
end = temp;// 新的表尾
size--;// 长度减一
} else {// 删除位置合理且表不位空且删除位置不在头结点也不再尾结点
for (int i = 1; i < index - 1; i++) {
temp = temp.getNext();
}
temp.setNext(temp.getNext().getNext());// 设置新的后继
temp.getNext().setPrev(temp);// 设置新的前驱
size--;// 长度减一
}
}
} }
} public static void main(String[] args) throws IndexException {
MyDoublelinkedlist dl = new MyDoublelinkedlist();
dl.add(new DoubleNode(1));
dl.add(new DoubleNode(2));
dl.remove(1);
System.out.println(dl);
}
} /*
* 双向链表的结点 一个值域,两个指针域
*/
class DoubleNode<T> {
private T element;// 值域
private DoubleNode prev;// 前驱
private DoubleNode next;// 后继
// 构造函数 public DoubleNode(T t) {
element = t;
prev = null;
next = null;
} public void setPrev(DoubleNode dn) {
prev = dn;
} public void setNext(DoubleNode dn) {
next = dn;
} public DoubleNode getPrev() {
return prev;
} public DoubleNode getNext() {
return next;
} public T getElement() {
return element;
}
}

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. ORA-01034: ORACLE not available ORA-27101

    出现ORA-01034和ORA-27101的原因是多方面的:主要是oracle当前的服务不可用,shared memory realm does not exist,是因为oracle没有启动或没有正 ...

  2. 01二维矩阵中最大全为1的正方形maxSquare——经典DP问题(二维)

    在一个二维01矩阵中找到全为1的最大正方形 1 0 1 0 0 1 0 1 1 1 1 1 1 1 1 1 0 0 1 0 以矩阵中每一个点作为正方形右下角点来处理,而以该点为右下角点的最大边长最多比 ...

  3. jquery attr方法获取input的checked属性问题

    1.通过prop方法获取checked属性,获取的checked返回值为boolean,选中为true,否则为flase <input type="checkbox" id= ...

  4. JAVA的SPI简单应用

    最近在研究dubbo时,发现了JAVA的SPI特性.SPI的全名为Service Provider Interface,是JDK内置的一种服务发现机制. 具体实现: 1.定义一个接口 public i ...

  5. mac navicate破解版汉化

    https://pan.baidu.com/s/1dRoalG8lZ-AMGmZrj8OhpQ 提取密码:e8ad 安装完navicate之后解压zh-Hans.zip 点击Resources文件夹 ...

  6. AI工具5.13

    如果想选中上面的很多图形,可以锁定不需要选择的下面的图形.选择需要锁定的对象.“对象”“锁定”“所选对象” “对象”“变换”“再次变换”快捷键“ctrl=d"一般前面有其他操作如“移动”“复 ...

  7. bzoj1935

    题解: x升序排序 y离散化+树状数组 代码: #include<bits/stdc++.h> using namespace std; ; inline int read() { ,f= ...

  8. linux-xshell同时向多台服务器一起发命令

    概述:有时候我们要往多台linux服务器上面步东西,一台一台布能烦死我们.如果能同时向多台服务器发命令岂不美哉. 开工: 首先打开exshell,查看->撰写栏  打开 然后瓷砖排序,看起来方便 ...

  9. Traumland--梦乡--IPA--德语

    德国电影<<英俊少年>>的插曲.

  10. eclipse server和tomcat的区别,将server的部署目录改到自己安装的tomcat中及如何设置tomcat用户

    转:http://www.cnblogs.com/Yogurshine/archive/2013/06/05/3118525.html 一.发现问题(如果不把项目部署到tomcat的webapp目录下 ...