LeetCode链表题小记
本文将LeetCode上大部分链表类题,按照思路整理在一块。
比较巧妙的题
- 138 复制带随机指针的链表:三部曲
- 141 环形链表
- 142 环形链表 II
- 160 相交链表
二分、递归、合并
- 21 合并两个有序链表
- 23 合并K个排序链表:二分+递归,类似归并递归排序
- 109 有序链表转换二叉搜索树:二分+递归
- 148 排序链表:二分+递归
用链表表示一个数(逆序或正序),两数相加
- 2 两数相加
- 445 两数相加 II :需要双栈
链表翻转:定位待翻转区间前一个结点p1,得到区间第一个结点p2,持续拎出p2->next插到p1后面
- 206 反转链表:全部翻转
- 92 反转链表 II:指定区间翻转
- 24 两两交换链表中的节点
- 25 K 个一组翻转链表
- 234 回文链表
- 143 重排链表:L1/Ln/L2/Ln-1...
删除结点:也需要定位前面一个结点
- 203 移除链表元素:删除结点值等于给定值的结点
- 83 删除排序链表中的重复元素:保留第一个重复元素
- 82 删除排序链表中的重复元素 II:不保留第一个重复元素
- 19 删除链表的倒数第N个节点:需要确保N为有效值,然后夹板
- 237 删除链表中的节点:无返回值地删除指定结点,乾坤大挪移
- 面试题 02.01 移除重复节点:删除未排序链表中的重复节点,保留最开始出现的节点,需哈希表
直白题
- 61 旋转链表:首尾相接再切断
- 86 分隔链表:左右小推车
- 147 对链表进行插入排序
类似思想题
- 202 快乐数。第一版思路:首先数不会一直膨胀下去,会保证在三位数以内;因此走了几百步以内必然会重复;判断终止条件就是遇到1或者重复数,可以数组/哈希表/集合来记录。优化思路:一系列数可以看做一个链表,重复数就变成了链表有环问题,用快慢指针。