一、数组
查找:O(1)
插入、删除:O(n)
二、链表
应用场景:1. 频繁插入和删除,链表优于数组。 2. 不知道有多少个元素需要添加。
查找:O(n)
插入、删除:O(1)
三、问答题
数组和链表的区别以及应用场景;假如有5万个数,有序,需要查找某一个数,问需要使用数组还是链表?
四、典型例题
例题①:反转一个单链表(LC206、剑指15.反转链表)
例题②:两两交换链表中相邻的节点(LeetCode24. 两两交换链表中的节点)
例题③:判断链表中是否有环(LC141、剑指55.链表中环的入口结点)
五、扩展例题—数组
第一组(原地移动元素问题):LeetCode283. 移动零、LeetCode27. 移除元素、LeetCode26. 删除排序数组中的重复项、LeetCode80. 删除排序数组中的重复项 II
第二组(排序算法思路的应用):LeetCode75. 颜色分类、LeetCode88. 合并两个有序数组、LeetCode215. 数组中的第K个最大元素
第三组(对撞指针):LeetCode167. 两数之和 II - 输入有序数组、LeetCode125. 验证回文串、LeetCode344. 反转字符串、LeetCode345. 反转字符串中的元音字母、LeetCode11. 盛最多水的容器
第四组(滑动窗口):LeetCode209. 长度最小的子数组、LeetCode3. 无重复字符的最长子串、LeetCode438. 找到字符串中所有字母异位词、LeetCode76. 最小覆盖子串
六、扩展例题—链表
第一组:LeetCode206. 反转链表、LeetCode92. 反转链表 II
第二组:LeetCode83. 删除排序链表中的重复元素、LeetCode86. 分隔链表、LeetCode328. 奇偶链表、LeetCode2. 两数相加、LeetCode445. 两数相加 II
第三组(虚拟头节点):LeetCode203. 移除链表元素、LeetCode82. 删除排序链表中的重复元素 II、LeetCode21. 合并两个有序链表
第四组:LeetCode24. 两两交换链表中的节点、LeetCode25. K 个一组翻转链表、LeetCode147. 对链表进行插入排序、LeetCode148. 排序链表
第六组(双指针):LeetCode19. 删除链表的倒数第N个节点、LeetCode61. 旋转链表、LeetCode143. 重排链表、LeetCode234. 回文链表