跟learnjiawa一起每天一道算法编程题,既可以增强对常用API的熟悉能力,也能增强自己的编程能力和解决问题的能力。算法和数据结构,是基础中的基础,更是笔试的重中之重。
- 不积硅步,无以至千里;
- 不积小流,无以成江海。
题目描述
Java版剑指offer编程题第14题--链表中倒数第k个结点: 输入一个链表,输出该链表中倒数第k个结点。
我的想法
- 链表结构没有索引,不能像数组那样直接根据get(index)得到你想要的元素,只能用指针遍历链表,找到相等的了,就返回。如果要解决题目中的问题,需要考虑两点:
- 首先,要用一个指针遍历一遍链表,获得链表的总结点数size
- 知道了总节点数,那么倒数第k个结点实际上就是正数第(size-k+1)个结点。也就是说再用一个指针从前往后遍历到第(size-k+1)个结点就行了。
- 等第一个指针走完了,第二个指针再开始行动,有点浪费时间,能否改变第二个指针的时间,使得第一个指针遍历完链表后,第二个指针恰好就走到了倒数第二个节点?
- 很简单呀,第一个指针先走k个节点,第二个指针就开始跟着走,这样当第一个指针遍历完链表后,第二个指针恰好走到倒数第k个节点。
解题方法1
代码测试
代码测试控制台输出结果:
总结
链表查找元素的题目,比较简单,其实也可以用空间换时间,将链表每个节点存到数组里面,按索引返回结点值,不过这里给出的节法更好,速度快,并且不会改变节点。
参考文献
[1]程杰. 大话数据结构. 北京:清华大学出版社, 2011.
更多
对我的文章感兴趣,点个关注是对我最大的支持,持续更新中……
关注微信公众号LearnJava,发现更多精彩!