【新浪面试题】如何技高一筹解决查找单链表中的倒数第k个结点
解决方法:
使用快慢指针,慢指针先不动,快指针先走k-1步,然后两个指针一起以同样的速度走。当快指针到达终点时,慢指针正好停留在倒数第k-1个节点。因为它们之间的距离始终保持k-1。
代码如下:
package com.guigu.LinkedListDemo;public class SpeedAndSlow {public static void main(String[] args) {// 创建一个单链表LinkedList list = new LinkedList();HNode hNode1 = new HNode(1, "tom");HNode hNode2 = new HNode(2, "jack");HNode hNode3 = new HNode(3, "simth");HNode hNode4 = new HNode(4, "cls");list.add(hNode1);list.add(hNode2);list.add(hNode3);list.add(hNode4);// 遍历链表list.list();System.out.println();int k = 3;HNode lock = getBackwardsK(list, k);System.out.printf("倒数第%d个节点是%s", k, lock.name);}public static HNode getBackwardsK(LinkedList list, int k) {HNode speed = list.head; // 定义一个快指针,初始化为headHNode slow = list.head; // 定义一个慢指针,初始化为head// 当快指针走到链表尾的时候退出while(speed.next != null) {if(--k > 0) { // 让快指针先走k-1步speed = speed.next;}else {// 快指针和慢指针一起走speed = speed.next;slow = slow.next;}}// 此时慢指针所在的位置就是倒数第k个节点if(k > 0) {return null;}return slow;}
}
运行结果:
【新浪面试题】如何技高一筹解决查找单链表中的倒数第k个结点相关推荐
- java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...
转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...
- 大数据面试之新浪面试题
大数据面试之新浪面试题 学长1 一面 1)自我介绍 叫什么名字,来自哪里,本科哪个学校,硕士哪个学校,大数据做了多长时间,对Hadoop生态圈以及Spark生态圈中的哪些技术比较了解(很简单的一句就带 ...
- 【融博笔试题】查找单链表倒数第k个结点的值
继华赛之后,又一次倒在面试门前.基础不扎实就是不行啊! 下来做完这道题,顺便复习单链表.代码如下: //------------------------------------------------ ...
- [剑指offer]面试题15:链表中倒数第k个结点
面试题15:链表中倒数第k个结点 题目:输入一个链表,输出该链表中倒数第 k 个结点.为了符合大多数人的习惯,本题从1 开始计数,即链表的尾结点是倒数第1 个结点.例如一个链表有6个结点,从头结点开始 ...
- 【 C 】在单链表中插入一个新节点的尝试(二)
在上篇博文中:[ C ]在单链表中插入一个新节点的尝试(一),我们最后提到了如果向单链表的开头(起始位置)插入一个节点,上篇博文中给出的程序显然完成不了这任务. 这篇博文中,我们将解决这个问题,给出一 ...
- 【 C 】在单链表中插入一个新节点的尝试(一)
根据<C和指针>中讲解链表的知识,记录最终写一个在单链表中插入一个新节点的函数的过程,这个分析过程十分的有趣,准备了两篇博文,用于记录这个过程. 链表是以结构体和指针为基础的,所以结构体和 ...
- python链表删除尾部节点_python单链表中如何查找和删除节点?
在之前的文章[python单链表中如何插入和输出节点?]中给大家介绍了单链表是什么,以及如何进行添加节点.输出所以节点.下面本篇文章给大家介绍如何查找和删除节点,希望对大家有所帮助. 如何从单链表中查 ...
- C语言 单链表查找出倒数第,查找单链表倒数第k个元素
查找单链表倒数第m个结点,要求时间复杂度为O(n).(提示,使用双指针) 解题思路: 常规思路为先获取链表的长度N,然后返回N-k+1位置处的结点即可.但是中需要遍历两次链表. 我们使用另一种算法,设 ...
- 在带头结点单链表中查找最大值,将其与最后一个元素交换(交换值)
[问题描述] 在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素. [输入形式] 循环输入若干个整数,以字母结束输入,建立带头结点的单链表. [输出形式] 输出最大值与最 ...
最新文章
- Python学习——反射
- vs2010安装AnkhSVN,但是不起作用解决方法
- Xamarin.Forms弹出对话框插件
- mysql 和区块链的差别_论区块链是什么数据库——正名篇
- 去中心化抵押借贷市场当前总借款量94.24亿美元
- .net Core 学习笔记(实体字段映射,IOC注入)
- Nginx初学者指南
- 微信开发者工具如何使用SCSS和配置wxml文件高亮及格式化
- java httpclient 关闭_httpclient 4种关闭连接
- 微信小程序订阅消息通过服务通知发送
- 简述三级管开关的导通条件
- 洛谷P5706 【深基2.例8】再分肥宅水__C++描述
- \t\t中国历代皇帝列表,中国皇帝列表,中国历代时间表,中国各朝代列表
- 编译选项默认关闭adb RSA指纹认证
- 椭圆抛物面matlab程序,椭圆抛物面画法.pdf
- python办公室自动化之office颜值担当-PPT
- 【UE4】蓝图转为C++官方教程部分笔记
- 弘辽科技:淘宝收藏加购在哪里看?如何提升收藏加购数量?
- linux mysql 邮件_linux中mysql 自动备份发邮件 到指定邮箱代码
- 纯CSS3炫酷3D星空动画特效