## Java数据结构（四）：线性表之双向链表 转

凌枫yong

java实现简单的双向链表，代码如下：

``````package datastructure.linear.linked;

import datastructure.exception.StructureException;
import datastructure.linear.AbstractList;

/** * @Description 双向链表实现 * @author mastery * @Date 2015年6月30日下午9:11:51 */
public class BidirectionalLinkedList<T> extends AbstractList<T> {

class Node<T1> {
/** * 数据域 */
T1 element;

/** * 指向前驱结点的指针 */
Node<T1> prior;

/** * 指向后继结点的指针 */
Node<T1> next;

public Node(Node<T1> next) {
super();
this.prior = next;
this.next = next;
}

public Node(T1 element, Node<T1> prior, Node<T1> next) {
super();
this.element = element;
this.prior = prior;
this.next = next;
}

}

private Node<T> currentNode;

head = currentNode = new Node<T>(null);
size = 0;
}

/** * 得到当前下标对应的结点 * * @param index * @throws StructureException */
public void indexNodeToCurrent(int index) throws StructureException {
if (index < -1 || index > size - 1) {
throw new StructureException("index参数异常！");
}
if (index == -1) {
return;
}
int j = 0;
while (currentNode != null && j < index) {
currentNode = currentNode.next;
j++;
}
}

@Override
public void insert(int index, T t) throws StructureException {
if (index < 0 || index > size) {
throw new StructureException("index参数异常！");
}
// 得到当前下标的上一个结点
indexNodeToCurrent(index - 1);
Node<T> insertNode = new Node<T>(t, currentNode, currentNode.next);
if (currentNode.next != null) {
// 将新元素生成结点插入到当前结点下
currentNode.next.prior = insertNode;
}
currentNode.next = insertNode;
size++;
}

@Override
public void delete(int index) throws StructureException {
if (isEmpty()) {
throw new StructureException("链表为空");
}
if (index < 0 || index > size) {
throw new StructureException("index参数异常");
}
indexNodeToCurrent(index - 1);
Node<T> twoNextNode = currentNode.next.next;
if (twoNextNode != null) {
twoNextNode.prior = currentNode;
}
currentNode.next = twoNextNode;
size--;
}

@Override
public T get(int index) throws StructureException {
if (isEmpty()) {
throw new StructureException("链表为空");
}
if (index < 0 || index > size) {
throw new StructureException("index参数异常！");
}
indexNodeToCurrent(index);
return currentNode.element;
}

}
``````

### 凌枫yong

2018/08/06
0
0
《数据结构与算法系列》合集整理

《数据结构与算法系列》合集整理 整理来自博客园skywang12345，以下摘自作者介绍： “最近抽空整理了"数据结构和算法"的相关文章。在整理过程中，对于每种数据结构和算法分别给出"C"、"C++"...

kaixin_code
2018/12/01
0
0
Java核心（四）你不知道的数据集合

2018/11/28
0
0

honeymose
2018/12/16
0
0

2018/09/07
0
0

day11

architect刘源源
55分钟前
3
0

Linux就该这么学

2
0
git 使用

1，首先在github配置好信息和仓库，然后在本地进行操作 git init git config user.name 'zhangwuer' git config user.email '56789053@qq.com' 2，与远程分支建立连接 git checkout -b test......

3
0
git checkout 命令详解

shzwork

8
0
【Nginx】Nginx多级代理，获取客户端真实请求IP以及每级代理IP

Nginx多级代理，获取客户端真实请求IP以及每级代理IP 如图所示，每一级nginx里的location配置里需要加上对应的配置，最后一级nginx是直接到应用，测试时为了方便，直接用echo模块去测试，打印...

7
0