JAVA实现链表中倒数第K个节点问题(《剑指offer》)(考虑问题要全面)
来源:互联网 发布:旋风磁力数据接口 编辑:程序博客网 时间:2024/05/18 03:48
题目描述
本题收获:考虑问题要全面,保持代码的鲁棒性(健壮性)。
提高代码的鲁棒性的有效途径是进行防御性编程。
防御性编程 是 一种编程习惯,是指预见在什么地方可能会出现问题,并为这些可能出现的问题制定处理方式。
本题需要考虑的注意事项:
1、考虑传入的头指针为NULL;
2、考虑链表结点总数 少于 k;
3、考虑输入的 k 值小于等于0;
这三点一定要考虑,防止潜在的崩溃风险。
相关题目,可做思考:
1、求链表的中间结点。如果链表中结点总数为奇数,返回中间结点;若结点总数是偶数,返回中间结点的任意一个。
为了解决这个问题,我们可以定义两个指针,同时从链表的头结点出发,一个指针一次走一步,另一个指针一次走两步。当走的快的指针走到链表的末尾时,走的慢的指针正好在链表的中间。
2、判断一个单向链表是否形成了环形结构。
和前面的问题一样,定义两个指针,同时从链表的头结点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快得指针走到了链表的末尾(即pNext->NULL)都没有追上第一个指针,那么链表就不是环形链表。
通过这两个相关题目的解决思路,可以看出当我们用一个指针遍历链表不能解决问题时,可以尝试用两个指针来遍历链表,一个走得快些,另一个慢些。
因此对于本题,寻找倒数第k个结点,也可以这样做:
定义两个指针,第一个指针从链表的头指针开始遍历向前走 k-1,第二个指针保持不动,从第 k 步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在 k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第 k 个结点。
- JAVA实现链表中倒数第K个节点问题(《剑指offer》)(考虑问题要全面)
- JAVA实现链表中倒数第K个节点问题(《剑指offer》)
- 剑指offer_面试题15_链表中倒数第k个节点(考虑问题要全面)
- 剑指offer(16):链表中倒数第k个节点
- #剑指offer--(16)链表中倒数第k个节点
- 链表中倒数第k个节点(Java实现)
- 剑指Offer 面试题22:链表中倒数第k个节点 Java代码实现
- 链表中倒数第k个节点(剑指Offer 第14 题)
- 【剑指offer-解题系列(14)】链表中倒数第k个节点
- 剑指offer算法题--链表中倒数第k个节点(c++)
- 剑指Offer之链表中倒数第K个节点
- 来自《剑指offer》 链表中倒数第k个节点
- 【剑指offer系列】 链表中倒数第k个节点___15
- 剑指offer--15.链表中倒数第k个节点
- 剑指Offer :寻找链表中倒数第K个节点
- 剑指offer 链表中倒数第k个节点
- 剑指offer-链表中倒数第K个节点-php
- 剑指offer-链表中倒数第K个节点
- JMeter非GUI模式自动生成测试报告
- spark on yarn
- 浅谈php设计模式
- mysql导入导出数据
- checkStyle配置说明、范例和结果分析
- JAVA实现链表中倒数第K个节点问题(《剑指offer》)(考虑问题要全面)
- 自定义圆环
- 小金的询问——二分查找
- 在JSP网页上展示date类型的参数
- 奖学金
- Corn表达式
- windows下wamp安装php-memcache扩展
- c++第五次实验
- 内核中防止竞争状态的手段