我一直认为做任何事情,无论是做一个项目, 读一本书,学习某个知识点, 都是需要总结的。 总结意味着对整个过程做一次全面的梳理和反省, 这样才能走得更远。 做完这些总结后, 想忘掉这些知识都很困难。对于leetcode题目, 对于每一类题目做一个总结, 总结的内容主要包括 题目分类, 做题心得, 做题过程中采过的坑。
先从题目类型入手
链表元素的调整
此类型最经典的题目就是链表的反转, 61 Rotate List
基于此题目可以做很多变化
相邻的两个元素为一组,对每组做反转,24 Swap Nodes in Pairs
相邻的k个元素为一组,对每组做反转,25 Reverse Nodes in k-Group
对指定连续元素做反转, 92 Reverse Linked List II
此类别相关的题目:
143 Reorder List
86 Partition List, 快速排序的基本思想之一,这里只是要求基于链表实现。
对于此类题目,基本上都可以用递归来实现, 递归实现非常简单和优雅, 递归函数的返回值基本都为链表头 和 链表尾元素(用于链表的连接)。
链表合并
链表的合并也是合并排序的基础, 最简单的是2个已排序链表的合并,可以扩展到3个链表的合并和k个链表的合并。k个链表的实现可以基于最小堆实现, 降低时间复杂度。
21 Merge Two Sorted Lists
23 Merge k Sorted Lists
148 Sort List, 这一题可以用归并排序完成, 会用到 Merge Two Sorted Lists
会持续的补充。。。。
网友评论