题目链接

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

题目内容

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

示例:

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

返回链表 4->5.

分析

以案例分析:

输入 1->2->3->4->5, 和 k = 2.

初始状态如下;

使用两个节点,两个节点都同时指向第一个节点;

然后让其中一个节点移动 k 个位置;

然后让两个节点同时移动,直到先移动的节点指向 null;

由这个例子可以得出解法如下:

1、首先初始化两个节点(可以只初始化一个节点,其中一个节点使用传过来的参数),两个节点都指向第一个节点;

2、先让其中一个节点移动 k个位置;

3、同时让两个节点移动,直到先移动的节点指向 null便结束。

需要注意的问题:

如果该链表长度不到 k怎么办呢?

如果传入的 k 正好是链表长度怎么办呢?

由于上面两个问题得到下面的解决办法:

定义一个整型变量,记录先移动节点第一次移动的次数;

如果先移动节点移动次数小于 ** k ** 且先移动指针指向 null了,证明原链表长度小于 k ,直接返回 null即可。

如果不然就直接再进行循环就可以了。

这样同时也解决了传入的k正好是链表长度的问题,因为此时先移动的节点为null,此时另一个节点不用移动即可,正好是倒数第k个节点。

代码

/**
* 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) { ListNode nodeNew = head;
int num = 0;
for(int i=0;i<k&&nodeNew!=null;i++){
nodeNew = nodeNew.next;
num++;
}
if(num < k && nodeNew == null)
return null;
while(nodeNew!=null){
head = head.next;
nodeNew = nodeNew.next;
} return head;
}
}

欢迎关注

欢迎大家的关注

扫描下方的二维码关注我的微信公众号:code随笔

Leetcode 面试题22. 链表中倒数第k个节点 Java语言求解的更多相关文章

  1. LeetCode 面试题22. 链表中倒数第k个节点

    题目链接:https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/ 输入一个链表,输出该链表中倒数第 ...

  2. 【剑指offer】面试题 22. 链表中倒数第 K 个节点

    面试题 22. 链表中倒数第 K 个节点

  3. C语言面试题22. 链表中倒数第k个节点

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

  4. 【剑指Offer】面试题22. 链表中倒数第k个节点

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

  5. 力扣题解-面试题22. 链表中倒数第K个节点

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

  6. 《剑指offer》面试题22. 链表中倒数第k个节点

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

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

    剑指 Offer 22. 链表中倒数第k个节点 题意 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. ​ 例如,一个链表有 6 个 ...

  8. 【剑指offer】22. 链表中倒数第k个节点

    剑指 Offer 22. 链表中倒数第k个节点 知识点:链表:双指针 题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例 ...

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

    剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可. package com.walega ...

  10. 力扣 - 剑指 Offer 22. 链表中倒数第k个节点

    题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...

随机推荐

  1. Solon2 接口开发: 了解 LoadBalance

    上一文的代码 HttpUtils.http(sevName, ctx.path()) (来自 "solon.cloud.httputils" 插件的工具类),内部是通过 sevNa ...

  2. PPT 产品发布会PPT应该怎么样改

    PPT 毕业答辩PPT应该怎么样改 大图背景打底 刺眼 收集素材

  3. SpringBoot Docker 发布

    本文是手动模式,可以移步 Intellij IDEA 集成 Docker 发布 使用 Intellij 集成Docker 发布,比较方便 pom 文件 <groupId>com.vipso ...

  4. 如何安装和使用 Hugging Face Unity API

    Hugging Face Unity API 提供了一个简单易用的接口,允许开发者在自己的 Unity 项目中方便地访问和使用 Hugging Face AI 模型,已集成到 Hugging Face ...

  5. Flutter如何有效地退出程序

    今天博主来谈一个开发Flutter App的小技巧--怎样有效地退出程序. 这种方法典型的应用场景就是用户许可协议的同意与否.从用户的角度讲,虽然大部分人都会无脑点击"同意",但我 ...

  6. ChatGPT 插件,组合后更妙了

    ChatGPT 插件,组合后更妙 大家好,我是章北海mlpy 昨天极简介绍了一些热门的ChatGPT插件 我测试了一些组合玩法,感觉效率.效果都远超预期. 今天就演示一下如何利用多个插件,高速阅读.理 ...

  7. DNS--简介&&解析过程

    1 功能 将域名解析为IP地址 基本解决IP难于记忆的问题 也可以将IP地址解析为域名 2 域名 由一连串用点(.)分隔的字符串组成的 标识计算机在网络中的电子方位的 3 存储位置 linux /et ...

  8. 库函数 | C++17 std::filesystem文件系统 用法指北

    本文将针对常用的场景,对 std::filesystem 的使用逐一进行验证: 判断文件夹是否存在 创建单层目录 逐级创建多层目录 创建多级目录 当前文件路径 创建文件"from.dat&q ...

  9. signed main 和 int main 的区别

    事实上只是因为有人直接 #define int long long 了...然后int main改成signed main就行了 #define int long long ... signed ma ...

  10. 2.5D 组态案例合集 | 智慧园区、数据中心、SMT 生产线、汽车制造

    在阅读文章之前,大家可以思考下 2.5D 设计属于哪种界定? 2.5D 是通过二维的元素来呈现出三维的效果.其实在国外并没有 2.5D 这样的称呼,标准说法是 Isometric 风格,翻译过来就是等 ...