当前位置: 首页 > news >正文

【LeetCode】剑指 Offer 22. 链表中倒数第k个节点 p136 -- Java Version

题目链接:https://leetcode.cn/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/

1. 题目介绍(22. 链表中倒数第k个节点)

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。

例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。

【测试用例】:
示例:

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

2. 题解

2.1 快慢指针 – O(n)

时间复杂度O(n),空间复杂度O(1)
在这里插入图片描述

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode(int x) { val = x; }* }*/
class Solution {public ListNode getKthFromEnd(ListNode head, int k) {// 错误输入判断if (head == null || k <= 0) return null;// 定义快慢指针ListNode quick = head;ListNode slow = head;// 调整快指针到指定位置for (int i = 0; i < k-1; i++){// 说明链表长度小于k,出现错误,不满足题目要求if (quick == null) return null;quick = quick.next;}// 开始移动快慢指针while (quick.next != null){quick = quick.next;slow = slow.next;}return slow; }
}

在这里插入图片描述

3. 相关题目

求链表的中间节点。如果链表中的节点总数为奇数,则返回中间节点;如果节点总数是偶数,则返回中间两个节点的任意一个。为了解决这个问题,我们也可以定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。当走得快的指针走到链表的末尾时,走得慢的指针正好在链表的中间。

举一反三:
当我们用一个指针遍历链表不能解决问题的时候,可以尝试用两个指针来遍历链表。可以让其中一个指针遍历的速度快一些(比如一次在链表上走两步),或者让它现在链表上走若干步。

4. 参考资料

[1] 面试题22. 链表中倒数第 k 个节点(双指针,清晰图解)-- 2.1图片来源

http://www.lryc.cn/news/31279.html

相关文章:

  • 经典卷积模型回顾7-轻量化模型MobileNet实现图像分类(matlab)
  • 程序员压力大?用 PyQt 做一个美*女GIF设置桌面,每天都有好心情
  • Shell命令——sed命令
  • C语言练习 | 初学者经典练习汇(2)
  • git分支
  • Java每天15道面试题 | redisII
  • 浏览器渲染原理
  • 华为OD机试题 - 查找单入口空闲区域(JavaScript)| 含思路
  • 制造型企业想要做好数字化改造,要注意以下几点!
  • 【蓝桥杯集训·每日一题】AcWing 1488. 最短距离
  • 比亚迪:全球最大电动汽车制造商的坎坷成长之路
  • Java开发 - Quartz初体验
  • 无头盔开发vr XR Device Simulator操作(更新)
  • 《C++代码分析》第二回:函数重载const char* ,char*,const char[],char[]汇编代码上的区别
  • 【学习笔记】深入理解JVM之垃圾回收机制
  • 49.在ROS中实现local planner(2)- 实现Purepersuit(纯跟踪)算法
  • Allegro如何设通孔Pin和Via的消盘操作指导
  • Android工厂模式
  • 神经网络硬件加速器-架构篇
  • Python raise用法(超级详细,看了无师自通)
  • 1.SpringSecurity快速入门
  • Graph Partition: Edge cut and Vertex cut
  • Javascript周学习小结(初识,变量,数据类型)
  • C语言-基础了解-10-C函数
  • 【LeetCode】剑指 Offer(16)
  • 第三十九章 linux-并发解决方法二(互斥锁mutex)
  • 脚本方式本地仓库jar包批量导入maven私服
  • 【c++】引用的学习
  • linux 软件安装及卸载
  • XShell连接ubuntu20.04.LTS