【剑指offer-Java版】15链表中倒数第K个结点
链表中倒数第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个结点相关推荐
- 剑指offer面试题[15]-链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 思路: 假设链表有n个结点,那么倒数第k个结点就是从头结点开始的第n-k+1个结点,我们只要从头结点开始往后走n-k+1步就可以了.那么问题来了: ...
- 剑指offer(C++)-JZ22:链表中倒数最后k个结点(数据结构-链表)
作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点 ...
- 剑指Offer - 面试题22. 链表中倒数第k个节点(快慢指针)
1. 题目 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5 ...
- 剑指offer面试题22. 链表中倒数第k个节点(链表)
题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...
- 【Java】找到链表中倒数第k个结点
题目描述 : 输入一个链表,输出该链表中倒数第k个结点. 解题思路 : 1.根据以上链表进行分析 2.算法思想 : 定义两个引用,即快慢指针,都从头节点开始向后走: 要找到倒数第k个节点,即要让快指针 ...
- 剑指offer没有java版吗_剑指Offer(Java版) 持续更新中
面试题2 单例(之前有整理,略) 面试题3 二维数组中的查找 public boolean find(int target, int [][] array) { boolean found = fal ...
- 剑指offer java版 test3—从尾到头打印链表
标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...
- [剑指offer]面试题15:链表中倒数第k个结点
面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...
- 剑指Offer #14 链表中倒数第k个结点(快慢指针) | 图文详解
题目来源:牛客网-剑指Offer专题 题目地址:链表中倒数第k个结点 题目描述 输入一个链表,输出该链表中倒数第k个结点. 节点结构如下: public class ListNode {int val ...
最新文章
- 常用小功能(打电话、发短信、发邮件)
- Android信使Messenger解析
- python获取excel某一列-Python从Excel中读取日期一列的方法
- 【爬虫笔记】爬虫基础
- gensim出现segmentation Fault解决方案
- .NET的一点历史故事:作者的一些感想
- 洛谷——P1046 [NOIP2005 普及组] 陶陶摘苹果
- 提取rosbag中的图像话题存为本地图像
- Coolite中的ComboBox控件示例
- tetp服务器怎么上传文件,tftp服务器ip是什么 TFTP服务器怎么设置
- 操盘软件富赢版V7 2016正式版
- SqlServer导出为mdf
- Win10卸载edge浏览器与后悔重装
- ES6之你应该知道的知识(一)
- 关于安装VISIOnbsp;2007报错office.zh-…
- 数据库关于索引问题(违反唯一约束)
- python 数学公式_python的数学算法函数及公式用法
- ubuntu定时执行任务
- html单击图片效果显示,html点击文字显示图片
- 在知乎发文章基本没流量
热门文章
- oracle统计信息收集的作用,oracle 11g 收集统计信息的新特点介绍
- C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员
- GitLab 已迁移至谷歌云平台,并表示目前运行良好
- 11月29日云栖精选夜读:阿里传奇工程师多隆的程序世界
- 关于网络连接方式的总结(HostOnly,NAT....)
- 使用ARouter实现组件化
- OCR文字识别软件的快速任务功能如何用
- oracle 12c 13姨
- Mongodb 请求处理流程
- linux/hpux 添加用户