解决方法:

使用快慢指针,慢指针先不动,快指针先走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个结点相关推荐

  1. java递归单链表查找中间元素_《数据结构与算法——C语言描述》答案 3.11 查找单链表中的特定元素(递归)...

    转载请注明出处:http://blog.csdn.net/xdz78 #include #include //查找单链表中的特定元素,<数据结构与算法--c语言描述> 3.11 答案 in ...

  2. 大数据面试之新浪面试题

    大数据面试之新浪面试题 学长1 一面 1)自我介绍 叫什么名字,来自哪里,本科哪个学校,硕士哪个学校,大数据做了多长时间,对Hadoop生态圈以及Spark生态圈中的哪些技术比较了解(很简单的一句就带 ...

  3. 【融博笔试题】查找单链表倒数第k个结点的值

    继华赛之后,又一次倒在面试门前.基础不扎实就是不行啊! 下来做完这道题,顺便复习单链表.代码如下: //------------------------------------------------ ...

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

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

  5. 【 C 】在单链表中插入一个新节点的尝试(二)

    在上篇博文中:[ C ]在单链表中插入一个新节点的尝试(一),我们最后提到了如果向单链表的开头(起始位置)插入一个节点,上篇博文中给出的程序显然完成不了这任务. 这篇博文中,我们将解决这个问题,给出一 ...

  6. 【 C 】在单链表中插入一个新节点的尝试(一)

    根据<C和指针>中讲解链表的知识,记录最终写一个在单链表中插入一个新节点的函数的过程,这个分析过程十分的有趣,准备了两篇博文,用于记录这个过程. 链表是以结构体和指针为基础的,所以结构体和 ...

  7. python链表删除尾部节点_python单链表中如何查找和删除节点?

    在之前的文章[python单链表中如何插入和输出节点?]中给大家介绍了单链表是什么,以及如何进行添加节点.输出所以节点.下面本篇文章给大家介绍如何查找和删除节点,希望对大家有所帮助. 如何从单链表中查 ...

  8. C语言 单链表查找出倒数第,查找单链表倒数第k个元素

    查找单链表倒数第m个结点,要求时间复杂度为O(n).(提示,使用双指针) 解题思路: 常规思路为先获取链表的长度N,然后返回N-k+1位置处的结点即可.但是中需要遍历两次链表. 我们使用另一种算法,设 ...

  9. 在带头结点单链表中查找最大值,将其与最后一个元素交换(交换值)

    [问题描述] 在带头结点单链表中查找最大值,将其值与最后一个元素交换,输出交换后的单链表各元素. [输入形式] 循环输入若干个整数,以字母结束输入,建立带头结点的单链表. [输出形式] 输出最大值与最 ...

最新文章

  1. Python学习——反射
  2. vs2010安装AnkhSVN,但是不起作用解决方法
  3. Xamarin.Forms弹出对话框插件
  4. mysql 和区块链的差别_论区块链是什么数据库——正名篇
  5. 去中心化抵押借贷市场当前总借款量94.24亿美元
  6. .net Core 学习笔记(实体字段映射,IOC注入)
  7. Nginx初学者指南
  8. 微信开发者工具如何使用SCSS和配置wxml文件高亮及格式化
  9. java httpclient 关闭_httpclient 4种关闭连接
  10. 微信小程序订阅消息通过服务通知发送
  11. 简述三级管开关的导通条件
  12. 洛谷P5706 【深基2.例8】再分肥宅水__C++描述
  13. \t\t中国历代皇帝列表,中国皇帝列表,中国历代时间表,中国各朝代列表
  14. 编译选项默认关闭adb RSA指纹认证
  15. 椭圆抛物面matlab程序,椭圆抛物面画法.pdf
  16. python办公室自动化之office颜值担当-PPT
  17. 【UE4】蓝图转为C++官方教程部分笔记
  18. 弘辽科技:淘宝收藏加购在哪里看?如何提升收藏加购数量?
  19. linux mysql 邮件_linux中mysql 自动备份发邮件 到指定邮箱代码
  20. 纯CSS3炫酷3D星空动画特效

热门文章

  1. 【优化】1335- 图片压缩、加载和格式选择
  2. C#绩效管理系统(二)导航栏和用户管理窗口的基本实现
  3. 一名投资客手写MT4爆仓现价
  4. Java编程那些事儿68——抽象类和接口(一)
  5. SAP MM批次管理(3)批次级别--大海
  6. 计算机专业的学生简历范文,计算机专业学生的简历范文精选
  7. MacBook pro 用什么vpn 好_扫地机器人真得好用么?云米互联网扫地机Pro测评!
  8. 【导数术】8.三角函数
  9. Java处理除数为零的情况
  10. 【案例分享】红旗国产C+级豪华轿车座舱 HMI设计