链表中倒数第K个结点:快慢指针解决

需要注意的地方是
1) 可能会存在输入的链表大小小于k
2) 输入的k可能小于等于0 - 所以必须限定k大于0

public class _Q15 {public ListNode FindKthToTail(ListNode head, int k){if(head == null || k < 1) return null;ListNode pre = head.next;ListNode after = head.next;int count = 0;while(count++ < k && pre != null){pre = pre.next;}if(count < k) return null; // 链表结点个数小于kwhile(pre != null){ // 一直到pre == null的时候,after就是所求pre = pre.next;after = after.next;}return after;} }

测试代码:

public class _Q15Test extends TestCase {_Q15 K = new _Q15();public void test(){ListNode head = new ListNode();ListNode node1 = new ListNode();ListNode node2 = new ListNode();ListNode node3 = new ListNode();ListNode node4 = new ListNode();node1.value = 1;node2.value = 2;node3.value = 3;node4.value = 4;head.next = node1;node1.next = node2;node2.next = node3;node3.next = node4;node4.next = null;int k1 = 1;int k2 = 10;int k3 = 2;int k4 = 4;int k5 = 0;ListNode result;/** 4 * NULL * 3 * 1 * NULL * NULL*/result = K.FindKthToTail(head, k1);if(result != null) System.out.println(result.value); else System.out.println("NULL");result = K.FindKthToTail(head, k2);if(result != null) System.out.println(result.value); else System.out.println("NULL");result = K.FindKthToTail(head, k3);if(result != null) System.out.println(result.value); else System.out.println("NULL");result = K.FindKthToTail(head, k4);if(result != null) System.out.println(result.value); else System.out.println("NULL");result = K.FindKthToTail(head, k5);if(result != null) System.out.println(result.value); else System.out.println("NULL");result = K.FindKthToTail(null, k1);if(result != null) System.out.println(result.value); else System.out.println("NULL");}}

【剑指offer-Java版】15链表中倒数第K个结点相关推荐

  1. 剑指offer面试题[15]-链表中倒数第K个结点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 假设链表有n个结点,那么倒数第k个结点就是从头结点开始的第n-k+1个结点,我们只要从头结点开始往后走n-k+1步就可以了.那么问题来了: ...

  2. 剑指offer(C++)-JZ22:链表中倒数最后k个结点(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点 ...

  3. 剑指Offer - 面试题22. 链表中倒数第k个节点(快慢指针)

    1. 题目 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5 ...

  4. 剑指offer面试题22. 链表中倒数第k个节点(链表)

    题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...

  5. 【Java】找到链表中倒数第k个结点

    题目描述 : 输入一个链表,输出该链表中倒数第k个结点. 解题思路 : 1.根据以上链表进行分析 2.算法思想 : 定义两个引用,即快慢指针,都从头节点开始向后走: 要找到倒数第k个节点,即要让快指针 ...

  6. 剑指offer没有java版吗_剑指Offer(Java版) 持续更新中

    面试题2 单例(之前有整理,略) 面试题3 二维数组中的查找 public boolean find(int target, int [][] array) { boolean found = fal ...

  7. 剑指offer java版 test3—从尾到头打印链表

    标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...

  8. [剑指offer]面试题15:链表中倒数第k个结点

    面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...

  9. 剑指Offer #14 链表中倒数第k个结点(快慢指针) | 图文详解

    题目来源:牛客网-剑指Offer专题 题目地址:链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 节点结构如下: public class ListNode {int val ...

最新文章

  1. 常用小功能(打电话、发短信、发邮件)
  2. Android信使Messenger解析
  3. python获取excel某一列-Python从Excel中读取日期一列的方法
  4. 【爬虫笔记】爬虫基础
  5. gensim出现segmentation Fault解决方案
  6. .NET的一点历史故事:作者的一些感想
  7. 洛谷——P1046 [NOIP2005 普及组] 陶陶摘苹果
  8. 提取rosbag中的图像话题存为本地图像
  9. Coolite中的ComboBox控件示例
  10. tetp服务器怎么上传文件,tftp服务器ip是什么 TFTP服务器怎么设置
  11. 操盘软件富赢版V7 2016正式版
  12. SqlServer导出为mdf
  13. Win10卸载edge浏览器与后悔重装
  14. ES6之你应该知道的知识(一)
  15. 关于安装VISIOnbsp;2007报错office.zh-…
  16. 数据库关于索引问题(违反唯一约束)
  17. python 数学公式_python的数学算法函数及公式用法
  18. ubuntu定时执行任务
  19. html单击图片效果显示,html点击文字显示图片
  20. 在知乎发文章基本没流量

热门文章

  1. oracle统计信息收集的作用,oracle 11g 收集统计信息的新特点介绍
  2. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员
  3. GitLab 已迁移至谷歌云平台,并表示目前运行良好
  4. 11月29日云栖精选夜读:阿里传奇工程师多隆的程序世界
  5. 关于网络连接方式的总结(HostOnly,NAT....)
  6. 使用ARouter实现组件化
  7. OCR文字识别软件的快速任务功能如何用
  8. oracle 12c 13姨
  9. Mongodb 请求处理流程
  10. linux/hpux 添加用户