【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
第一次思考分析:将链表倒序打印
脑暴:集合reverse、键值对知识点,都不合适。
重大失误点:1、不清楚链表是否支持根据索引获取属性值就想要实现。2、对于一个新的类型的题目,应该先了解基础知识(数据结构中的链表)
下次改进:1、自己的每一步思路需要查看API或者了解是否有这个方法可以实现,然后再写代码实现。2、将要做的题目分类,按照类别做,做一个新类别的算法题目时先去掌握基础的知识点。
复习:Java中的链表
Collection单列集合的ArrayList底层是链表、Map双列集合的HashMap的子类LinkedHashMap底层也是链表。两者的差别是:无序和有序。
复习之后的思路:
工具集分别有Array和Collections。Array的asList方法作用:将集合转数组,将数组转集合(需要泛型)。Collections中的判断、反转、等方法。
可以尝试使用Collections的方法来实现。
观察学习思路:
1、冷静思考周全。发现有改变链表结构和不改变链表结构两种方式来实现,询问面试官是否可以更改链表的结构,根据面试官要求再进一步分析。
(此题一般不能更改结构,因为打印只是一个只读操作,面试官一般不希望打印时修改内容)
2、根据链表的特点发现,只能依次获取链表的每个值,也就是遍历来实现依次获取每个值。将获取到的第一个值最后输出,获取到的最后的值最先输出。相当于“后进先出”的实现思路。
测试用例:待.
观察不懂的点进行补充:
为什么链表的时间复杂度是O(n)呢?而数组的是O(1)呢?
复杂度了解:
时间复杂度:就是一个算法执行需要消耗的时间。是这个算法每条语句的执行时间之和。
每条语句的执行时间就是这条语句执行的次数 * 执行的一次的时间之和。
(例如数组和链表:10个数据进行查找和修改,数组只执行一次即可,时间为10秒。而链表需要通过指针依次执行,若该值在第九位则执行了九(n)次,时间为90秒)。
链表和数组的性质区分:
数组是静态数据结构,链表是动态数据结构。
由于链表是空间不连续的,所以链表查找值是需要从头或者尾依次访问判断,语句需要执行n次。不像数组是在一块连续空间,语句只执行1次。
从具体实现上来看:链表是在不连续的空间内,需要靠指针来依次递进的判断来获取,数组是在一块连续的空间内,只需要访问一次即可得到想要获取的元素。
结论:链表需要靠指针依次访问和判断,所以执行了n次,所以时间复杂度是O(n),而数组则是在一块连续的空间进行判断。不论数组多长都只需要执行一次,时间复杂度为O(1)。
来源:oschina
链接:https://my.oschina.net/u/4432600/blog/3154390