1. 数据结构和算法(五)Java实现双向链表
1.1 什么是双向链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。
- value域–存放结点值的数据域
- prev域–存放结点的直接前继的地址(位置)的指针域(链域)
- next域–存放结点的直接后继的地址(位置)的指针域(链域)
双向链表是通过上述定义的结点使用 prev 以及 next 域依次串联在一起而形成的。
1.2 JAVA实现双向链表
CustomDoublyLinkedList类是一个自定义实现了双向链表。
package com.yuanxw.datastructure.chapter5;
/**
* 自定义双向链表
* @param <E>
*/
public class CustomDoublyLinkedList<E> {
/**
* Node数据结构
* Node内部类,外部无法访问
*
* @param <E>
*/
private static class Node<E> {
// Node节点value值
private E value;
// 上一个Node节点
private Node<E> prev;
// 下一个Node节点
private Node<E> next;
}
// 头节点元素
private Node<E> first;
// 尾节点元素
private Node<E> last;
// 自定义LinkedList大小
private int size;
/**
* 添加头节点元素
*
* @param element
* @return
*/
public boolean addFirst(E element) {
Node newNode = new Node();
newNode.value = element;
newNode.next = first;
if (isEmpty()) {
last = newNode;
first = newNode;
} else {
first.prev = newNode;
newNode.next = first;
}
first = newNode;
size++;
return true;
}
/**
* 向尾节点添加元素
* @param element
* @return
*/
public boolean addLast(E element) {
Node newNode = new Node();
newNode.value = element;
if (isEmpty()) {
last = newNode