LeetCode | 方法 | 备注 | ||
---|---|---|---|---|
1 | 21. 合并两个有序链表(简单) | while 遍历 + dummy | 解 | |
2 | 23. 合并K个升序链表(困难) | 优先级队列(二叉堆) + dummy | 【重点题】+ 求复杂度 | 解 |
3 | 19. 删除链表的倒数第 N 个结点(中等) | 双指针,先走 N+1 步 | 解 | |
4 | 876. 链表的中间结点(简单) | 快慢指针 | 解 | |
5 | 141. 环形链表(简单) | 快慢指针 | 解 | |
6 | 142. 环形链表 II(中等) | 快慢指针 + 从 head 和相遇点同步遍历 | 解 | |
7 | 160. 相交链表(简单) | 计数遍历两次 or 首尾相连 + 环形链表 | 要求不改变环结构 | 解 |
8 | 206. 反转链表(简单) | 两个指针+一个临时指针 | 【基础题】 | 解 |
9 | 92. 反转链表II(中等) | 头插法 | 【重点题】 | 解 |
-
「虚拟头结点」技巧,也就是
dummy
节点。如果不使用dummy
虚拟节点,代码会复杂很多,而有了dummy
节点这个占位符,可以避免处理空指针的情况,降低代码的复杂性 -
快慢指针:使用 do-while 循环
-
优先级队列(二叉堆):快速找到最大/最小值
// 声明方式
struct compare {
bool operator()(ListNode* a, ListNode* b) {
return a->val > b->val;
}
};
priority_queue <ListNode*, vector<ListNode*>, compare> queue; // 小顶堆
- 环起点寻找方式
- 反转链表