链表中倒数第k个节点,剑指offer,力扣

目录

题目地址:

剑指offer原题:

我们直接看题解吧:

解题方法:

难度分析:

审题目+事例+提示:

解题思路(双指针(快慢指针)):

代码实现:

代码优化:

代码实现(方法1):


题目地址:

LCR 140. 训练计划 II - 力扣(LeetCode)
难度:简单

今天刷链表中倒数第k个节点,大家有兴趣可以点上看看题目要求,试着做一下。

剑指offer原题:

输入一个链表,输出该链表中倒数第k个节点。

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

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

我们直接看题解吧:

解题方法:

方法1、顺序查找(需两次遍历,先求出链表长度)

方法2、双指针(只需一次遍历,不需要求出链表长度)

两个方法的时间复杂度与时间复杂度均为(n),(1)

难度分析:

属于基础性题目,链表基础,以及双指针使用。

审题目+事例+提示:

注意,单链表的长度不包括头结点,头节点看作位序0,头结点指向的下一个节点为位序1。

解题思路(双指针(快慢指针)):

创建两个指针,for,lat,它们均指向头结点

for指针先走cnt步,此时,两个节点相差cnt个节点

for,lat指针同步往后移动,最后直至for==null

for 指针指向cnt+1(实际为null),lat此时与for相差cnt
说白了,就是不需要知道链表长度,指针1先走k步,然后指针2和指针1(相差k)同时前进,当指针1指向链表最后一个元素的下一位(即null)时,指针2即为所求。

代码实现:

复制代码
class Solution {
    public ListNode trainingPlan(ListNode head, int cnt) {
        ListNode former = head, latter = head; //创建双指针,初始化指向头结点
        for(int i = 0; i < cnt; i++) {       //for先走cnt步
            if(former == null) return null;  //防止cnt大于链表长度,直接返回null
                                            //(因为此时没求解的意义了)
               former = former.next;
        }
        while(former != null) {             //同时往后移动,直至for指针指向尾节点的下一位即null
            former = former.next;
            latter = latter.next;
        }
        return latter;
    }
}
代码优化:
复制代码
class Solution {
    public ListNode getKthFromEnd(ListNode head, int k) {
        ListNode slow=head,fast=head;
        int t = 0;                               //加个变量t判断,代替第一个for循环
        while(fast!=null){
            if(t>=k) slow=slow.next;
            fast = fast.next;
            t++;
        }
        return slow;
    }
}

代码实现(方法1):

复制代码
class Solution {
    public ListNode trainningPlan(ListNode head, int cnt) {
        int n = 0;
        ListNode node = null;

        for (node = head; node != null; node = node.next) {
            n++;
        }
        for (node = head; n > cnt; n--) {
            node = node.next;
        }

        return node;
    }
}
相关推荐
看浪的路人17 分钟前
第6讲:Agent 安全体系——Prompt 注入防御、工具调用审计与输出合规
人工智能·算法
paopaokaka_luck20 分钟前
民宿管理系统 (AI民宿总结、协同过滤推荐算法、WebSocket 在线咨询、ECharts 经营分析、房态与结算联动、 民宿预订业务闭环)
java·人工智能·spring boot·websocket·数据分析·echarts·推荐算法
java资料站25 分钟前
十四、Spring AI Alibaba · 案例 · 基于 HumanInTheLoop 的内容审核系统
java·spring·状态模式
局部有解27 分钟前
LeetCode Hot100 438 找到字符串中所有字母异位词
c++·算法·leetcode
垆边人似月.36 分钟前
移动长度 k 子串使字符串变成回文
数据结构·算法
pride.li1 小时前
第12章 Python 教程-流程控制:循环结构
linux·服务器·python·算法
海绵宝宝转agent1 小时前
2026-10-16 4算法+1面经
算法
SunnyDays10111 小时前
如何使用 Java 提取 PPT 中的文字:整份文档、指定幻灯片与表格内容
java·powerpoint
毕设单片机1 小时前
springboot志愿服务平台的设计与实现 36731
java·spring boot·mysql·志愿服务平台