在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 “从前往后” 找,而 “从后往前” 找并不是它的强项。
为了能够高效率解决类似的问题,本节来学习双向链表(简称双链表)。
从名字上理解双向链表,即链表是 “双向” 的,如图
1. 双向链表节点
双向链表中各节点包含以下 3 部分信息:
- 指针域:用于指向当前节点的直接前驱节点;
- 数据域:用于存储数据元素;
- 指针域:用于指向当前节点的直接后继节点;
逻辑存储结构
使用双向链表存储 {1,3,5}
,数据存储的逻辑结构为:
private static class Node<E> {
E item;
LinkedList.Node<E> next;
LinkedList.Node<E> prev;
Node(LinkedList.Node<E> var1, E var2, LinkedList.Node<E> var3) {
this.item = var2;
this.next = var3;
this.prev = var1;
}
}