02.02、返回倒数第 k 个节点

02.02、[简单] 返回倒数第 k 个节点

1、题目描述

实现一种算法,找出单向链表中倒数第 k 个节点。返回该节点的值。

2、题解思路

本题的关键在于使用双指针法 ,通过两个指针(fastslow),让 fast 指针比 slow 指针先走 k 步,这样当 fast 到达链表末尾时,slow 正好指向倒数第 k 个节点。

具体步骤如下:

  1. 初始化两个指针 fastslow,都指向链表的头节点。
  2. fast 先走 k 步,使得 fastslow 之间的距离为 k
  3. 同时移动 fastslow,直到 fast 到达链表的末尾。
  4. 此时,slow 指针所指向的节点就是倒数第 k 个节点,返回该节点的值。

3、详细代码解析

复制代码
class Solution {
public:
    int kthToLast(ListNode* head, int k) {
        // 初始化两个指针,分别指向链表的头节点
        ListNode* fast = head;
        ListNode* slow = head;

        // 让 fast 指针先走 k 步
        while (k--) {
            fast = fast->next;
        }

        // 同时移动 fast 和 slow,直到 fast 到达链表的末尾
        // 当 fast 到达链表末尾时,slow 则正好指向倒数第 k 个节点,返回该节点的值
        while (fast) {
            fast = fast->next;
            slow = slow->next;
        }

        // slow 现在指向倒数第 k 个节点,返回该节点的值
        return slow->val;
    }
};

4、时间复杂度与空间复杂度

  • 时间复杂度O(n),其中 n 为链表的长度。由于我们只遍历了链表一次,因此时间复杂度是线性的。
  • 空间复杂度O(1),只用了两个指针,空间开销很小。

通过使用双指针技巧,我们可以在一次遍历中高效地找到倒数第 k 个节点。这个解法在不需要额外空间的情况下,能够很好地解决问题。

相关推荐
-许平安-21 分钟前
MCP项目笔记九(插件 bacio-quote)
c++·笔记·ai·plugin·mcp
沉鱼.4429 分钟前
第十三届题目
c语言·c++·算法
ZHOU_WUYI37 分钟前
ppo算法简单实现
人工智能·pytorch·算法
liulilittle1 小时前
C++ 无锁编程:单停多发送场景高性能方案
服务器·开发语言·c++·高性能·无锁·原子
无限进步_1 小时前
【C++】巧用静态变量与构造函数:一种非常规的求和实现
开发语言·c++·git·算法·leetcode·github·visual studio
小超超爱学习99371 小时前
大数乘法,超级简单模板
开发语言·c++·算法
Ricardo-Yang2 小时前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法
凌波粒2 小时前
LeetCode--344.反转字符串(字符串/双指针法)
算法·leetcode·职场和发展
啊哦呃咦唔鱼2 小时前
LeetCode hot100-543 二叉树的直径
算法·leetcode·职场和发展
sinat_286945192 小时前
harness engineering
人工智能·算法·chatgpt