链表中倒数第 k 个节点

1、参考资料

https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/

2、题目要求

题目描述

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

示例:

给定一个链表: 1->2->3->4->5, 和 k = 2.返回节点 4.

3、代码思路

方案一:先求得链表长度 n,最顺序遍历至第 n-k 个节点

第一时间想到的解法:

  1. 先遍历统计链表长度,记为 n
  2. 设置一个指针走 (n-k) 步,即可找到链表倒数第 k 个节点。

方法二:双指针法

定义双指针:前指针 prePointer 和后指针 behPointer

前指针 prePointer 和后指针 behPointer 永远相差 k 个节点,这样当 behPointer 指向链表末尾 null 时,prePointer 恰好指向倒数第 k 个节点

具体步骤为:前指针 prePointer 和后指针 behPointer 都指向链表首节点,behPointer 先向后移动 k 步,然后 prePointerbehPointer 一起后移,直至 behPointer == null

4、代码实现

  1. 代码

    public class LastKthNode {public static void main(String[] args) {SingleLinkedList singleLinkedList = new SingleLinkedList();singleLinkedList.add(new Node(1));singleLinkedList.add(new Node(2));singleLinkedList.add(new Node(3));singleLinkedList.add(new Node(4));singleLinkedList.add(new Node(5));singleLinkedList.add(new Node(6));System.out.println("顺序输出~~~");singleLinkedList.show();Node lastKthNode = singleLinkedList.lastKthNode(6);System.out.println("倒数第 k 个节点为:" + lastKthNode);}}//链表类
    class SingleLinkedList {private Node head = new Node(0);public void add(Node node) {// 首节点指针不能移动哦,需要定义辅助指针Node preNode = head;while (preNode.next != null) {preNode = preNode.next;}preNode.next = node;}public void show() {// 首节点指针不能移动哦,需要定义辅助指针Node curNode = head.next;while (curNode != null) {System.out.print(curNode.data + "-->");curNode = curNode.next;}System.out.println();}public Node lastKthNode(int k) {// 目标:当 behPointer 指向 null 时,prePointer 指向倒数第 k 个节点Node prePointer = head.next;Node behPointer = head.next;// behPointer 指针还需要向后移动多少步int leftSteps = k;// behPointer 向后移动 k 步while (leftSteps > 0 && behPointer != null) {behPointer = behPointer.next;leftSteps -= 1;}// 如果 behPointer 还未移动 k 步就已经是 null,则说明链表长度不足 kif(leftSteps !=0) {return null;}// behPointer 和 prePointer 同时向后移动,当 behPointer 为 null 时,prePointer 则指向倒数第 k 个节点while(behPointer!=null) {behPointer = behPointer.next;prePointer = prePointer.next;}// 返回倒数第 k 个节点return prePointer;}
    }//节点
    class Node {public Integer data;public Node next;public Node(Integer data) {this.data = data;}public String toString() {return data.toString();}
    }
    
  2. 程序运行结果

    顺序输出~~~
    1-->2-->3-->4-->5-->6-->
    倒数第 k 个节点为:1
    

链表中倒数第 k 个节点相关推荐

  1. 剑指offer:面试题22. 链表中倒数第k个节点

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

  2. 链表中倒数第k个节点

    链表中倒数第k个节点 [题目]: 输入一个链表,输出该链表中倒数第k个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6.这个链表的倒数第 3 个节点是值为 4 ...

  3. 链表中倒数第k个节点 1

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

  4. 【每日一题】剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点

  5. 递增的整数序列链表的插入_每日算法题 | 剑指offer 链表专题 (5)链表中倒数第k个节点...

    点击上方"Jerry的算法和NLP",选择"星标"公众号 重磅干货,第一时间送达 题目 链表中倒数第k个节点 题目要求 输入一个链表的头结点,从尾到头反过来打印 ...

  6. LeetCode-剑指 Offer 22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 思路一:利用快慢双指针 /*** Definition for singly-linked list.* struct ListNode {* int ...

  7. python 链表中倒数第k个节点

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

  8. 《漫画算法2》源码整理-8 链表中倒数第K个节点元素

    链表中倒数第K个节点元素 public class KthFromEnd {public static Node findKthFromEnd(Node head, int k){Node p1 = ...

  9. 剑指 Offer 22. 链表中倒数第k个节点(C语言)

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

  10. 牛客网(剑指offer) 第十四题 链表中倒数第k个节点

    //题目描述:输入一个链表,输出链表该链表中倒数第k个节点. <?php /*class ListNode{var $val;var $next = NULL;function __constr ...

最新文章

  1. 第十七届全国大学生智能汽车竞赛乐山师范学院申请承办西部赛区报告
  2. linux回到桌面的命令符_Linux命令行环境与桌面环境护切换
  3. ios开发两个简单的错误提示和原因
  4. 海洋工程-专业名词-学科关键词(终极版)
  5. box-shadow阴影合集
  6. Linux表空间扩容,linux下oracle表空间导致磁盘空间不足
  7. js中return、return false 、return true各自代表什么含义
  8. 取两堆石子(威佐夫博弈)
  9. mex 1 hello,world
  10. html页面调用高德地图,html前端使用高德地图入门教程,并在地图上标记位置-Go语言中文社区...
  11. 《Pro Ogre 3D Programming》读书笔记 之 第十一章 动态阴影 (转)
  12. 用Maven新建Web项目时报错
  13. python listbox排序_Python3.3.2 tkinter ttk TreeView percolumn排序只按最后一列排序?
  14. 安装MyBatis教程
  15. 射频电路设计——传输线理论
  16. 讲教资备考时间和精力
  17. OneNote使用技巧 - 7.一键修改字体样式大小(Onestatic宏插件使用,附常用宏命令代码)
  18. 模仿百思不得姐项目笔记
  19. 前端使用prettier格式化规范
  20. 祥云杯2022 writeup

热门文章

  1. 2021年中国电动扫地机市场趋势报告、技术动态创新及2027年市场预测
  2. android titlebar 高度是多少,什么是TitleBar的默认高度和Android中Titlebar中的默认TextSize?...
  3. php yii开发工具,开源PHP开发框架Yii教程
  4. 从入门到入土:基于C语言采用TCP协议实现远程控制|详细说明|利用流套接字实现一个简单的远程控制系统
  5. 想快速体验谷歌 Fuchsia OS?FImage 项目来了!
  6. 虾米回应“关闭”消息:不予置评;明年 Win 10 或将原生运行安卓应用;Perl 项目治理新规| 极客头条...
  7. 原来 Kylin 的增量构建,大有学问! | 原力计划
  8. 面试妥了!2020 爬虫面试题目合集
  9. Namebase 给 GitHub 开发者白送钱,是拉新还是投资骗局?
  10. 1415120000,华为这个数字赞爆!