链表

34 阅读1分钟

链表种类

单链表

每个链表节点中存在 next 指针指向下一个链表节点。

截屏2025-09-22 10.47.36.png

双链表

每个链表节点中存在 next 指针指向下一个链表节点,存在 prev 指针指向上一个链表节点。

截屏2025-09-22 10.53.29.png

循环链表

链表中最后一个节点的 next 指针指向第一个元素。

截屏2025-09-22 10.50.58.png

链表操作

设计链表

class LinkNode<T> {
  constructor(
    public val: T | null = null,
    public next: LinkNode<T> | null = null,
    public prev: LinkNode<T> | null = null
  ) {}
}

虚拟头节点

根据链表定义,遍历链表的方式就是不停找链表的 next 指针,对链表下一个节点进行处理。但是如果直接遍历链表会存在一个问题,就是头节点的处理逻辑和后续链表节点不一致,需要单独对头节点进行处理。

比如删除链表中的某个节点,这时需要找到被删除节点的父节点,但是对于头节点来说,头节点没有父节点,需要单独处理,所以为了统一链表节点的处理方式,可以定义一个虚拟头节点。以上图单链表为例:

截屏2025-09-22 11.04.38.png

这样就能简化逻辑,方便理解。