---
title: "【面试算法笔记】0201-链表-链表理论基础"
source: https://www.zbhgis.com/note/note-20260502-1
author: zbhgis 浩瀚地学
created: 2026-05-02
tags: [面试算法笔记, 算法, LeetCode]
---

> 本文来自浩瀚地学，规范页面（含代码高亮与图片灯箱）：https://www.zbhgis.com/note/note-20260502-1
# 【面试算法笔记】0201-链表-链表理论基础

个人主页：https://github.com/zbhgis

# 前言

本系列主要记录自己学习算法的过程中的感悟。

# 链表的概念

**什么是链表？**链表是一种**物理存储单元上非连续、非顺序**的线性结构。

**组成**：每个节点（Node）包含两部分。

**数据域 (val)**：存储具体的值。

**指针域 (next)**：存放指向下一个节点的地址（指针）。

**终止条件**：最后一个节点的指针域通常指向 `null`（空指针），表示链表结束。

# 链表的类型

单链表：每个节点只有一个指针指向下一个节点

![img](https://cdn.jsdelivr.net/gh/zbhgis/BlogImg@main/blog/202607131912544.png)

双链表：每个节点有两个指针，分别指向前驱和后继

![img](https://cdn.jsdelivr.net/gh/zbhgis/BlogImg@main/blog/202607131912182.png)

循环链表：尾节点指向头节点，形成一个环

![img](https://cdn.jsdelivr.net/gh/zbhgis/BlogImg@main/blog/202607131912331.png)

# 链表的存储方式

在内存中是**散乱**分布的，通过指针将各个节点连接起来。

![img](https://cdn.jsdelivr.net/gh/zbhgis/BlogImg@main/blog/202607131912930.png)

# 链表的基本操作

删除节点

![img](https://cdn.jsdelivr.net/gh/zbhgis/BlogImg@main/blog/202607131911189.png)

添加节点

![img](https://cdn.jsdelivr.net/gh/zbhgis/BlogImg@main/blog/202607131911287.png)

单链表定义（操作见算法）

```Java
public class ListNode {
    int val;
    ListNode next;
    
    public ListNode() {};
    public ListNode(int val) {this.val = val;}
    public ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
   
```

双链表定义（操作见算法）

```Java
public class ListNode {
    int val;
    ListNode prev;
    ListNode next;
    
    public ListNode() {};
    public ListNode(int val) {this.val = val;}
    public ListNode(int val, ListNode prev, ListNode next) {
        this.val = val;
        this.prev = prev;
        this.next = next;
    }
}
```

# 链表的性能分析

查询O(n) 增删O(1)

# 参考

https://programmercarl.com/%E9%93%BE%E8%A1%A8%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
