数据结构链表(10)——双链表简介

49 阅读2分钟

(一)需求

双链表,是指每个节点多了向前指向上一个节点的字段。

(二)双链表

1、定义

双链表以类似的方式工作,但还有一个引用字段,称为“prev”字段。有了这个额外的字段,您就能够知道当前结点的前一个结点。 img

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 原始的下一个节点;

img

用 cur 重新链接 prev 和 next。

img

与单链表类似,添加操作的时间和空间复杂度都是 O(1)。

(2)删除操作

如果我们想从双链表中删除一个现有的结点 cur,我们可以简单地将它的前一个结点 prev 与下一个结点 next 链接起来。

与单链表不同,使用“prev”字段可以很容易地在常量时间内获得前一个结点。

因为我们不再需要遍历链表来获取前一个结点,所以时间和空间复杂度都是O(1)。

示例

img

我们的目标是从双链表中删除结点 6。

因此,我们将它的前一个结点 23 和下一个结点 15 链接起来:

img

结点 6 现在不在我们的双链表中。

如果我们要删除第一个结点或最后一个结点怎么办?

  • 删除第一个节点,就是把第二个节点的prev 指向null
  • 删除最后一个节点,就是把倒数第二个节点的next 指向null

以上

参考链接

leetcode.cn/leetbook/re…

写在最后的话

学习路上,常常会懈怠

《有想学技术需要监督的同学嘛~》 mp.weixin.qq.com/s/FyuddlwRY…