在解决某些特殊问题时,单链表并不是效率最优的存储结构。比如说,如果算法中需要大量地找某指定结点的前趋结点,使用单链表无疑是灾难性的,因为单链表更适合 “从前往后” 找,而 “从后往前” 找并不是它的强项。
为了能够高效率解决类似的问题,本节来学习双向链表(简称双链表)。
从名字上理解双向链表,即链表是 “双向” 的,如图
image.png

1. 双向链表节点

双向链表中各节点包含以下 3 部分信息:

  1. 指针域:用于指向当前节点的直接前驱节点;
  2. 数据域:用于存储数据元素;
  3. 指针域:用于指向当前节点的直接后继节点;

image.png
逻辑存储结构
使用双向链表存储 {1,3,5},数据存储的逻辑结构为:
image.png

  1. private static class Node<E> {
  2. E item;
  3. LinkedList.Node<E> next;
  4. LinkedList.Node<E> prev;
  5. Node(LinkedList.Node<E> var1, E var2, LinkedList.Node<E> var3) {
  6. this.item = var2;
  7. this.next = var3;
  8. this.prev = var1;
  9. }
  10. }