双重链表

双链表是一种链表 。双向链表的节点有两个指向其他节点的指针下一个前一个。它被称为双链表,因为每个节点只有两个指向其他节点的指针。双向链表可以具有头部和/或尾部指针。

         ┌─────────┬─────────┬─────────┐   ┌─────────┬─────────┬─────────┐         
 null ◀──┤previous │  data   │  next   │◀──┤previous │  data   │  next   │         
         │"pointer"│         │"pointer"│──▶│"pointer"│         │"pointer"│──▶ null 
         └─────────┴─────────┴─────────┘   └─────────┴─────────┴─────────┘         
                          ▲                     △                   △              
                     HEAD │                     │     DOUBLE        │              
                                                └──── REFERENCE ────┘                 

双链表比单链表更节省空间; 但是,对于某些操作,它们可以显着提高时间效率。一个简单的例子是 get 函数,对于带有头部和尾部引用的双向链表,它将从头部或尾部开始,具体取决于要获取的元素的索引。对于 n 元素列表,要获取 n/2 + i 索引元素,带有头/尾引用的单链表必须遍历 n/2 + i 节点,因为它不能从尾部返回。带有头/尾引用的双向链表只需要遍历 n/2 - i 节点,因为它可以从尾部返回,以相反的顺序遍历列表。

C 中的示例代码