java求链表中倒数第k个结点

下面我用两种方法求解:

第一种方法:通常我们做这种题就是求出链表的长度=length,然后呢length-k的值就是我们要从链表头部走几步就可以了,代码解释:

java 复制代码
public class Solution {
    public class ListNode {
        int val;
        ListNode next = null;

        ListNode(int val) {
            this.val = val;
        }
    }
    public ListNode FindKthToTail(ListNode head,int k) {
        int length=0;
        ListNode cur=head;//为了不改变head的指向,定义临时变化指针
        while (cur!=null){
            cur=cur.next;
            length++;
        }
        if(k<0 || k>length)return null;//k值越界
        cur=head;
        for (int i = 0; i <length-k ; i++)
            cur=cur.next;
        return cur;

}
}

第二种方法,我们先定义两个指向head的指针,分别是fast和slow,让fast先走(k-1)步后fast和slow一起每次都走一步,当fast.next的值是null结束,这样fast和slow之间永远相差k个元素,我们值遍历一次链表就可以找到倒数第k个值,画图解释:

fast先走k-1步:

fast和slow一起走,每次一步:

代码实现:

java 复制代码
import java.util.*;
/*
public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}*/
public class Solution {
    public ListNode FindKthToTail(ListNode head,int k) {
         ListNode fast=head,slow=head;
         if(k<=0)return null;
         if (head==null)return null;
        for (int i = 0; i <k-1 ; i++){
            if (fast.next!=null)fast=fast.next;
            else {
                return null;//fast.next==null,但是k还没有走完,证明k值不合法太大了
            }
        }
        //k值合法
        while (fast.next!=null){
            fast=fast.next;
            slow=slow.next;
        }
        return slow;
    
    }
}
相关推荐
云和数据.ChenGuang1 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
憧憬成为java架构高手的小白1 小时前
LangGraph4j 实战(下)
java
天诰2 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
蜗牛一步步往上爬4 小时前
第十六章 C++语言在深度学习中的应用
开发语言·c++·深度学习
这个昵称不容易5 小时前
SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在
java·springboot·毕设
计算机毕设定制辅导-无忧学长6 小时前
《基于微信小程序的居家医疗陪护预约系统设计与实现》
java·spring boot·微信小程序·uniapp·居家医疗陪护预约系统
张张123y6 小时前
DSH 插件调试避坑:client.js 设置面板、热重载与高频报错排查表
开发语言·javascript·人工智能·开源·ecmascript·后端开发·ai agent
文丑颜不良啊7 小时前
LeetCode2221~2240题目解析
java·leetcode
秋饼7 小时前
Computer Use Agent Java 落地实战:感知-行动循环、执行器与安全围栏生产级实现
java·ai·技术分享·后端开发
冻柠檬飞冰走茶9 小时前
字母移动游戏题解:贪心求最长可保留连续子串(附 C 实现)
c语言·开发语言·数据结构·算法·动态规划