链表中倒数第k个结点

题目描述

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

这道题首先按照普通的方法用一个栈来存放链表数据然后在取出第k的数就可以了,但是这种方法的时间复杂度是O(n),不提倡;

现在我介绍一种时间复杂度为O(n-k)的方法,老规矩-->先贴源码,在分析:

    /*public class ListNode {int val;ListNode next = null;ListNode(int val) {this.val = val;}}*/public class Solution {public ListNode FindKthToTail(ListNode head,int k) {if(k==0){return null;}if(head==null) {return head;}if(head.next==null) {return head;}ListNode scale=head;for(int i=1;i<k;i++) {if(scale.next!=null){scale=scale.next;}else{return null;}}ListNode anw=head;while(scale.next!=null) {scale=scale.next;anw=anw.next;}return anw;}}

这个解法的巧妙之处在于突破了编程的固定思维,采用一种独特的方式解决;

巧妙之处在于使用了一个变量当做刻度尺,来量出它的长度,这也是该算法的核心.现在开始进行案例分析:

假设head中数据为{1,2,3,4,5},如下图所示

假设k值是2,现在定义一个刻度尺变量int scale=0,由于k值是2,那么循环(k-1)次,scale通指向

    for(int i=1;i<k;i++) {if(scale.next!=null){scale=scale.next;}else{return null;}}

指向如下图所示(现在的指向其实是前面数第k个,现在就相当于定义好了一个刻度尺一样,开始测量):

刻度值变量scale指向了从前面数第k个变量,现在使用 ListNode anw=head;即anw以scale为标准进行移动:

首先第一次while(scale.next!=null)之后:

第二次 while(scale.next!=null)之后:

第三次 while(scale.next!=null)之后:

第四次 while(scale.next!=null): scale.next==null,结果已经出来了,anw指向了倒数第k个值;

总结:该算法的巧妙之处,通过从前面考虑,以一个变量当做刻度尺一步步next,真的太精妙了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/653601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

appsmith安装手记:3.appsmith安装

终于到了安装appsmith这个大神的时候&#xff0c;这个简单&#xff0c;真是越到后面越容易。 安装说明见&#xff1a;https://docs.appsmith.com/getting-started/setup/installation-guides/docker &#xff0c;建议使用 Docker Compose 进行长期的 Appsmith 部署 步骤一&…

SpringSecurity笔记

SpringSecurity 本笔记来自三更草堂&#xff1a;https://www.bilibili.com/video/BV1mm4y1X7Hc/?spm_id_from333.337.search-card.all.click&#xff0c;仅供个人学习使用 简介 Spring Security是Spring家族中的一个安全管理框架。相比与另外一个安全框架Shiro&#xff0c;…

Leetcode刷题笔记题解(C++):1117. H2O 生成(多线程)

思路&#xff1a; 解法二&#xff1a;生产者-消费者解法 1.把 hydrogen 线程看作生产者&#xff0c;oxygen 线程看作消费者&#xff0c;缓冲队列大小为2。 2.hydrogen 把生成的氢放入队列&#xff1b;oxygen 线程每次从队列里消费两个氢元素。 3.生产者生产两个氢元素后会因为…

Selenium解决滑块验证问题:自动化与技巧

滑块验证是一种常见的人机验证机制&#xff0c;用于识别和防止自动化程序的访问。在爬虫和自动化测试中&#xff0c;我们经常面临需要处理滑块验证的情况。本文将介绍如何使用 Selenium 库处理滑块验证问题。 一、安装 Selenium 首先&#xff0c;确保你已经安装了 Selenium。你…

【极数系列】Linux环境搭建Flink1.18版本 (03)

文章目录 引言01 Linux部署JDK11版本1.下载Linux版本的JDK112.创建目录3.上传并解压4.配置环境变量5.刷新环境变量6.检查jdk安装是否成功 02 Linux部署Flink1.18.0版本1.下载Flink1.18.0版本包2.上传压缩包到服务器3.修改flink-config.yaml配置4.启动服务5.浏览器访问6.停止服务…

[go] 享元模式

享元模式 是一种结构型设计模式&#xff0c; 它摒弃了在每个对象中保存所有数据的方式&#xff0c; 通过共享多个对象所共有的相同状态&#xff0c; 让你能在有限的内存容量中载入更多对象。 模型说明 享元模式只是一种优化。在应用该模式之前&#xff0c;你要确定程序中存在…

二叉树--199. 二叉树的右视图/medium 理解度C

199. 二叉树的右视图 1、题目2、题目分析3、复杂度最优解代码示例4、适用场景 1、题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出…

贪吃蛇项目(基于C语言和数据结构中的链表)

建立文件 首先先建立3个文件。 Snake.h 函数的声明 Snake.c 函数的定义 Test.c 贪吃蛇的测试 分析项目 我们分析这整个项目 建立节点 首先在我们实现游戏开始的部分之前&#xff0c;我们要先创建贪吃蛇的节点&#xff0c;再由此创建整个贪吃蛇所包含的一些信息&#…

基于对比学习的信息抽取

Label Refinement via Contrastive Learning for Distantly-Supervised Named Entity Recognition NAACL 2022&#xff1b;做的远程监督NER&#xff0c;通过知识库构建 伪标签&#xff0c;通过对比学习构建负样本&#xff0c;负样本是entity的多余部分或其他不相关部分。即对e…

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

目 录 项目搭建步骤确定node版本使用Vite创建Vue3项目规范目录结构配置环境修改Vite配置文件集成路由工具Vue Router集成状态管理工具Pinia集成CSS预编译器Sassvite-plugin-svg-icons图标组件集成UI框架Element Plus集成HTTP 请求工具 Axios 项目代码规范集成ESLint配置集成Pre…

【HTML 基础】元素和标签

文章目录 1. <p> - 段落标签2. <h1> - <h6> - 标题标签3. <a> - 超链接标签4. <img> - 图片标签5. <ul>, <ol>, <li> - 列表标签无序列表有序列表 总结 HTML&#xff08;Hypertext Markup Language&#xff09;是构建 Web 页面…

Debezium日常分享系列之:Debezium 2.6.0.Alpha1发布

Debezium日常分享系列之&#xff1a;Debezium 2.6.0.Alpha1发布 一、重大改变1.MongoDB2.重新选择列后处理器 二、改进和变化1.添加了新的匹配集合 API2.CloudEvents 架构名称自定义3.Oracle Infinispan 缓存改进4.支持 Spanner NEW_ROW_AND_OLD_VALUES 值捕获类型 一、重大改变…

【学网攻】 第(13)节 -- 动态路由(OSPF)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由是什么&#xff1f; 二、实验 1.引入 实验拓扑图 实验配置 实验验证 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学…

鸿蒙 ArkTs初识

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 吐槽&#xff1a;官网上的案例只有代码和文档解释&#xff0c;没有可以直接运行查看效果的模拟器&#xff0c;这一点上&#…

【C++修行之道】STL(初识list、stack)

目录 一、list 1.1list的定义和结构 以下是一个示例&#xff0c;展示如何使用list容器: 1.2list的常用函数 1.3list代码示例 二、stack 2.1stack的定义和结构 stack的常用定义 2.2常用函数 2.3stack代码示例 一、list 1.1list的定义和结构 list的使用频率不高&#…

SQL注入:二次注入

SQL注入系列文章&#xff1a; 初识SQL注入-CSDN博客 SQL注入&#xff1a;联合查询的三个绕过技巧-CSDN博客 SQL注入&#xff1a;报错注入-CSDN博客 SQL注入&#xff1a;盲注-CSDN博客 目录 什么是二次注入&#xff1f; 二次注入演示 1、可以注册新用户 2、可以登录->…

【 JS 】函数

生命如潮&#xff0c;不断奔向远方的海洋。每一个潮起潮落&#xff0c;都是奋斗的旋律&#xff1b;每一片浪花&#xff0c;都是梦想的飞扬。勇往直前&#xff0c;扬帆远航&#xff0c;生命的航程注定精彩非凡。 - 林肯 目标 理解封装的意义&#xff0c;能够通过函数的声明实现逻…

通过mybatis拦截器给sql执行加一个耗时监控

代码没什么内容&#xff0c;直接贴上来吧&#xff0c;其中costTimeUtil可以看我的另一篇博文&#xff1a;java实现一个不带次数变量的加权平均值算法-CSDN博客 Slf4j Intercepts({Signature(type StatementHandler.class,method "query",args {Statement.class, …

1Panel CloudFlare证书申请失败的解决方案

在升级1Panel后&#xff0c;使用 CloudFlare DNS验证时&#xff0c;会提示 [*.biliwind.com] [*.biliwind.com] acme: error presenting token: cloudflare: failed to find zone biliwind.com.: ListZonesContext command failed: Invalid request headers (6003) 为解决此问…

系统分析师-21年-论文试题

系统分析师-21年-论文试题 更多软考知识请访问 https://ruankao.blog.csdn.net/ 题目任选其一 摘要字数在400字以内&#xff0c;可以分条叙述&#xff0c;但不允许有图、表、流程图。 正文字数为2000字至300字&#xff0c;文中可以分条叙述&#xff0c;但不要全部用分条叙述…