当前位置: 首页 > web >正文

剑指offer19_链表中倒数第k个节点

链表中倒数第k个节点


输入一个链表,输出该链表中倒数第 kk 个结点。

注意:

  • k >= 1;
  • 如果 kk 大于链表长度,则返回 NULL;
数据范围

链表长度 [ 0 , 30 ] [0,30] [0,30]

样例
输入:链表:1->2->3->4->5 ,k=2输出:4

方法思路

由于单链表不能直接索引到前驱节点,只能从前往后遍历。我们通过两次遍历解决问题:

  1. 第一次遍历:获取链表总长度 n
  2. 第二次遍历:计算倒数第 k 个节点的正序位置为 n - k + 1,遍历到该位置即可得到目标节点。

注意:当 k > n 时,需返回 nullptr

时间复杂度
  • O(n):链表总共遍历两次,时间复杂度为线性。
/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode* findKthToTail(ListNode* pListHead, int k) {int n = 0;for(auto p  = pListHead; p; p = p->next) n ++;if(k > n) return nullptr;auto p = pListHead;for(int i = 0; i < n - k; i ++) p = p->next;return p;}
};

假设链表为 1 -> 2 -> 3 -> 4 -> 5,求倒数第 2 个节点:

  1. 第一次遍历n = 5
  2. 计算位置n - k + 1 = 5 - 2 + 1 = 4
  3. 第二次遍历:移动到第 4 个节点(值为 4),返回结果。
边界条件
  • k <= 0k > n 时返回 nullptr
  • 空链表直接返回 nullptr
http://www.xdnf.cn/news/12865.html

相关文章:

  • Jmeter(四) - 如何在jmeter中创建网络测试计划
  • protues仿真+C51+外部中断
  • MATLAB生成大规模无线通信网络拓扑(任意节点数量)
  • 微服务体系下将环境流量路由到开发本机
  • spring中的@KafkaListener 注解详解
  • NLP学习路线图(三十四): 命名实体识别(NER)
  • unity实现自定义粒子系统
  • java 时区时间转为UTC
  • 云原生架构赋能企业数字化转型:从理念到落地的系统性探索
  • springboot启动mapper找不到方法对应的xml
  • 【Redis/2】核心特性、应用场景与安装配置
  • 用于小目标检测的归一化高斯Wasserstein距离(NWD)之论文阅读
  • 国家奖学金答辩PPT+文稿
  • Halo站点全站定时备份并通过邮箱存储备份
  • 【C++】25. 哈希表封装unordered_map和unordered_set
  • Ubuntu系统多网卡多相机IP设置方法
  • 【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
  • MCP笔记:介绍和原理
  • Web3 借贷与清算机制全解析:链上金融的运行逻辑
  • 基于安卓的线上考试APP源码数据库文档
  • MAC-安装Homebrew、安装Git
  • c++ decltype关键字
  • 二叉数-100.相同的树-力扣(LeetCode)
  • LLMs 系列科普文(3)
  • 用于机器学习的 Podman 简介:简化 MLOps 工作流程
  • 从零开始的云计算生活——番外,实战脚本。
  • 【基于阿里云搭建数据仓库(离线)】使用UDTF时出现报错“FlatEventUDTF cannot be resolved”
  • Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
  • 04.管理表
  • Linux系统的CentOS7发行版安装MySQL80