Skip to content

Latest commit

 

History

History
41 lines (30 loc) · 3.62 KB

ListNode.md

File metadata and controls

41 lines (30 loc) · 3.62 KB

LeetCode 链表

概述

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; // 小顶堆
  • 环起点寻找方式

rickey_4909

  • 反转链表

rickey_4923