(一)需求
双链表,是指每个节点多了向前指向上一个节点的字段。
(二)双链表
1、定义
双链表以类似的方式工作,但还有一个引用字段,称为“prev”字段。有了这个额外的字段,您就能够知道当前结点的前一个结点。
Java代码定义如下:
// Definition for doubly-linked list.
class DoublyListNode {
int val;
DoublyListNode next, prev;
DoublyListNode(int x) {val = x;}
}
2、操作:
(1)添加操作
如果我们想在现有的结点 prev 之后插入一个新的结点 cur,我们可以将此过程分为两个步骤:
链接 cur 与 prev 和 next,其中 next 是 prev 原始的下一个节点;
用 cur 重新链接 prev 和 next。
与单链表类似,添加操作的时间和空间复杂度都是 O(1)。
(2)删除操作
如果我们想从双链表中删除一个现有的结点 cur,我们可以简单地将它的前一个结点 prev 与下一个结点 next 链接起来。
与单链表不同,使用“prev”字段可以很容易地在常量时间内获得前一个结点。
因为我们不再需要遍历链表来获取前一个结点,所以时间和空间复杂度都是O(1)。
示例
我们的目标是从双链表中删除结点 6。
因此,我们将它的前一个结点 23 和下一个结点 15 链接起来:
结点 6 现在不在我们的双链表中。
如果我们要删除第一个结点或最后一个结点怎么办?
- 删除第一个节点,就是把第二个节点的prev 指向null
- 删除最后一个节点,就是把倒数第二个节点的next 指向null
以上
参考链接
写在最后的话
学习路上,常常会懈怠
《有想学技术需要监督的同学嘛~》 mp.weixin.qq.com/s/FyuddlwRY…