• 算法练习-第四天(链表中倒数最后k个结点)


    不要再因为那些你不能控制的事情有压力了,要专注于你能控制的事情
    文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

    👏👏👏
    哈喽!大家好,首先将我的刷题神器分享出来,点此注册
    😍😍😍

    在这里插入图片描述


    前言

    对于程序员来说算法属于基本功,掌握了算法就能够写出更高效的代码,所以一个好的练习算法的网站尤为重要,现在分享一下我经常刷算法题的网站,上面不仅有算法题,还有其他类型的题,赶紧刷起来吧,算法神器

    一、链表中倒数最后k个结点

    在这里插入图片描述

    二、题解

    import java.util.*;
    public class Solution {
        public ListNode FindKthToTail (ListNode pHead, int k) {
            int n = 0;
            ListNode fast = pHead; 
            ListNode slow = pHead;
            //快指针先行k步
            for(int i = 0; i < k; i++){  
                if(fast != null)
                    fast = fast.next;
                //达不到k步说明链表过短,没有倒数k
                else 
                    return slow = null;
            }
            //快慢指针同步,快指针先到底,慢指针指向倒数第k个
            while(fast != null){ 
                fast = fast.next;
                slow = slow.next;
            }
            return slow;
        }
    }
    
    

    三、分析

    1、解决方式(双指针

    双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个指针(特殊情况甚至可以多个),两个指针或是同方向访问两个链表、或是同方向访问一个链表(快慢指针)、或是相反方向扫描(对撞指针),从而达到我们需要的目的。

    思路:

    我们无法逆序遍历链表,就很难得到链表的倒数第kkk个元素,那我们可以试试反过来考虑,如果当前我们处于倒数第kkk的位置上,即距离链表尾的距离是kkk,那我们假设双指针指向这两个位置,二者同步向前移动,当前面个指针到了链表头的时候,两个指针之间的距离还是kkk。虽然我们没有办法让指针逆向移动,但是我们刚刚这个思路却可以正向实施。

    具体做法:

    step 1:准备一个快指针,从链表头开始,在链表上先走kkk步。
    step 2:准备慢指针指向原始链表头,代表当前元素,则慢指针与快指针之间的距离一直都是kkk。
    step 3:快慢指针同步移动,当快指针到达链表尾部的时候,慢指针正好到了倒数kkk个元素的位置。

    如下图所示:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    2、测试提交

    代码写完了就需要先自测一下,这个时候我们点击自测运行看一看能不能测试通过。

    在这里插入图片描述

    这里我们可以看到自测成功了,那我们就点击保存并提交来提交此题。

    在这里插入图片描述
    提交答案后会显示我们此题的运行时间以及占用内存,并且判断我们这两项超过了其他百分之多少的人,我们还可以点击进入下一题来接着进行刷题,这样会越刷越上瘾的。

    四、总结

    通过这个刷题神器刷题是真的过瘾,通过画图的方式将每一行代码分析出来就不会觉得代码难以理解了,所以赶紧刷起来吧,点此注册

    可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

  • 相关阅读:
    Laravel 下实现 Google 2fa 验证
    JMeter压测如何分配业务比例?
    一篇文章搞定什么是nodeJs它和NPM关系与应用
    Kali工具介绍(超详细!史上最全!)
    Typescript高级: 深入理解extends keyof语法
    pmp考试如何复习
    Go语言(下载、安装、环境配置、GoLand编译器安装、编写HelloWorld)
    Three.js中加载和渲染3D Tiles
    Matlab实验一
    C#面:System.Array.CopyTo() 和 System.Array.Clon() 的区别
  • 原文地址:https://blog.csdn.net/weixin_44096133/article/details/127068228