算法:链表
🔗 链表题型 + 技巧分类总结
1) 基础增删改/指针操作
信号:插入/删除指定值或节点。
手法:哑结点、单指针扫描。
- 203. Remove Linked List Elements
- 237. Delete Node in a Linked List
- 707. Design Linked List
2) 快慢指针(Floyd 技巧)
核心:一个走一步,一个走两步,解决找中点 / 判环 / 找环起点。
应用:
- 找中点:876. Middle of the Linked List
- 判环:141. Linked List Cycle
- 找环起点:142. Linked List Cycle II
- 回文链表:234. Palindrome Linked List (快慢找到中点,反转后半)
3) 前后双指针(距离 k)
信号:删除倒数第 N、找倒数第 k。
手法:两指针拉开间距。
- 19. Remove Nth Node From End of List
- 2095. Delete the Middle Node of a Linked List
4) 链表反转(整体/局部/分组)
整体反转:三指针(prev, cur, nxt)迭代,或者递归。
区间反转:定位 m,n → 切下来反转 → 接回。
成组反转:25. Reverse Nodes in k-Group
常见题:
- 206. Reverse Linked List
- 92. Reverse Linked List II
5) 成对/按位置交换
信号:交换相邻或第 k / 第 n-k+1 个。
手法:指针换连接,避免换值。
- 24. Swap Nodes in Pairs
- 1721. Swapping Nodes in a Linked List
6) 切分 + 拼接
核心:构造多个子链表,再拼回。
应用:
- 奇偶链表:328. Odd Even Linked List
- 分区链表:86. Partition List
- 重排链表:143. Reorder List
- 旋转链表:61. Rotate List
7) 合并/拆分/排序
两链合并:dummy + 两指针。
多链合并:23. Merge k Sorted Lists(小根堆/分治)。
等份拆分:725. Split Linked List in Parts
排序链表:归并排序 / 插入排序。
- 21. Merge Two Sorted Lists
- 148. Sort List
- 147. Insertion Sort List
8) 去重/重复处理
信号:有序/无序去重,保留唯一。
手法:有序靠相邻;无序用哈希。
- 83. Remove Duplicates from Sorted List
- 82. Remove Duplicates from Sorted List II
- 1836. Remove Duplicates from an Unsorted Linked List
9) 相交链表
信号:两链是否在某点相交。
手法:双指针 AB 互跳 或 哈希集合。
- 160. Intersection of Two Linked Lists
10) 回文/对称/孪生和
信号:回文判断、两端配对求和。
手法:快慢指针找中点 + 反转后半 / 栈辅助。
- 234. Palindrome Linked List
- 2130. Maximum Twin Sum of a Linked List
11) 数值模拟(大整数)
信号:节点存数字,模拟加法。
手法:逐位相加/进位,或栈逆序。
- 2. Add Two Numbers
- 445. Add Two Numbers II
12) 哈希/集合辅助
场景:检测相交、去重、复杂场景。
- 160. Intersection of Two Linked Lists
- 1836. Remove Duplicates from an Unsorted Linked List
13) 设计类题
缓存设计:O(1) get/put,需要淘汰策略 → 哈希表 + 双向链表。
- 146. LRU Cache
- 460. LFU Cache
跳表/有序结构设计:接近 O(log n) 的插删查 → 多层索引 + 随机级数。
- 1206. Design Skiplist