牛客网:NC69 链表中倒数最后k个结点

news2024/11/28 0:39:43

一、题目

函数原型:

struct ListNode* FindKthToTail(struct ListNode* pHead, int k )

二、思路

本题需要找到链表中的倒数第k个结点,有两种方法:

1.暴力解法:先遍历一次链表,计算出链表的长度;再遍历一次链表,找到倒数第k个结点。

2.快慢指针:设置一个快指针、一个慢指针,初始时快指针先移动k个结点,然后快慢指针一起移动,当快指针到达空时,慢指针的位置就是倒数第k个结点。

三、代码

代码1(暴力解法)

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
    // write code here
    struct ListNode *cur=pHead;//遍历指针
    int num=0;//链表长度值
    while(cur)//计算链表长度
    {
        num++;
        cur=cur->next;
    }
    if(num==0||k>num)//链表为空,或者k的值超出了链表长度,则返回空
    {
        return NULL;
    }   
    else//正常情况
    {
        cur=pHead;//遍历指针从头结点开始
        for(int i=num-k;i>0;i--)//遍历num-k次找到倒数第k个结点
        {
            cur=cur->next;
        }
        return cur;//返回倒数第k个结点
    }
}

代码2(快慢指针)

/**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param pHead ListNode类
 * @param k int整型
 * @return ListNode类
 */
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {
    // write code here
    if (pHead == NULL) //链表为空,直接返回空
    {
        return NULL;
    } 
    else //链表不为空
    {
        struct ListNode* slow = pHead;//慢指针
        struct ListNode* fast = pHead;//快指针

        for (int i = 0; i < k; i++) //快指针先走k个结点
        { 
            if(fast)//快指针不为空,说明k值没有超过链表长度
                fast = fast->next;
            else//快指针为空,说明k值超过了链表长度,直接返回空
            {
                return NULL;
            }
        }
        while (fast) //快慢指针一起走,当快指针为空时,慢指针就到达了倒数第k个结点
        {
            slow = slow->next;
            fast = fast->next;
        }
        return slow;
    }
}

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

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

相关文章

大厂面试题-MySQL索引的优点和缺点?

(图片)索引&#xff0c;是一种能够帮助MySQL高效从磁盘上检索数据的一种数据结构。在MySQL中的InnoDB引擎中&#xff0c;采用了B树的结构来实现索引和数据的存储 MySQL里面的索引的优点有很多&#xff1a; 1. 通过B树的结构来存储数据&#xff0c;可以大大减少数据检索时的磁…

【docker:容器提交成镜像】

容器创建部分请看&#xff1a;点击此处查看我的另一篇文章 容器提交为镜像 docker commit -a "sinwa lee" -m "首页变化" mynginx lxhnginx:1.0docker run -d -p 88:80 --name lxhnginx lxhnginx:1.0为啥没有变啊&#xff0c;首页&#xff1f; 镜像打包 …

CAN总线记录诊断助手 CAN记录仪

随着CAN总线的应用市场越来越多&#xff0c;不仅局限于汽车行业&#xff0c;工程车、特种车、消防、医疗等多行业都是以CAN总线通讯为主。总线的调试诊断也成为技术日常工作&#xff0c;有个好的工具能有效帮助发现问题、解决问题。 来可电子的CANLog-VCI是一款即插即用的CAN数…

从零开始:集成视频直播美颜SDK的步骤及注意事项

如果你是一位开发者&#xff0c;想要为你的视频直播应用添加美颜功能&#xff0c;那么你来对地方了。本文将从零开始&#xff0c;介绍集成视频直播美颜SDK的步骤及需要注意的事项&#xff0c;帮助你顺利实现这一技术目标。 步骤一&#xff1a;选择合适的美颜SDK 在开始之前&…

带有密码的Excel只读模式,如何取消?

Excel文件打开之后发现是只读模式&#xff0c;想要退出只读模式&#xff0c;但是只读模式是带有密码的&#xff0c;该如何取消带有密码的excel只读文件呢&#xff1f; 带有密码的只读模式&#xff0c;是设置了excel文件的修改权限&#xff0c;取消修改权限&#xff0c;我们需要…

银河麒麟操作系统安装_V4/V10系统详细使用教程

银河麒麟桌面操作系统V10是一款简单易用、稳定高效、安全创新的新一代图形化桌面操作系统产品。现已适配国产主流软硬件产品&#xff0c;同源支持飞腾、鲲鹏、海思麒麟、龙芯、申威、海光、兆芯等国产CPU和Intel、AMD平台&#xff0c;通过功耗管理、内核锁及页拷贝、网络、VFS、…

Python使用腾讯云SDK实现对象存储(上传文件、创建桶)

文章目录 1. 开通服务2. 创建存储桶3. 手动上传文件并查看4. python上传文件4.1 找到sdk文档4.2 初始化代码4.3 region获取4.4 secret_id和secret_key获取4.5 上传对象代码4.6 python实现上传文件 5 python创建桶 首先来到腾讯云官网 https://cloud.tencent.com/1. 开通服务 来…

Python 实践

文章目录 一、HttpRequests 一、Http Requests python——Request模块

家庭安全计划 挑战赛| 溺水预防

溺水预防 从了解到行动 家庭安全计划 | 少年急救官 地震避险逃生该怎么做&#xff1f; 起火了该如何应对&#xff1f; 哪些行为容易导致溺水&#xff1f; 家庭风险隐患有哪些&#xff1f; 家庭逃生演练四步骤你会吗&#xff1f; 国际救助儿童会&#xff08;英国&#xff…

C/C++ 动态内存管理(内存是如何分布的?malloc/new,free/delete的用法是什么?区别是什么?)

目录 一、前言 二、C/C中的内存分布 &#x1f4a6;了解内存区域的划分 &#x1f4a6;内存存储区域的对比和注意点 &#x1f4a6;内存管理的常考面试题 三、C语言的动态管理方式 四、C的动态管理方式 &#x1f4a6;new / delete 操作内置类型&#xff08;int,char.....&…

5 Paimon数据湖之表数据查询详解

更多Paimon数据湖内容请关注&#xff1a;https://edu.51cto.com/course/35051.html 虽然前面我们已经讲过如何查询Paimon表中的数据了&#xff0c;但是有一些细节的东西还需要详细分析一下。 首先是针对Paimon中系统表的查询&#xff0c;例如snapshots\schemas\options等等这些…

【每日一题】—— C. Anonymous Informant(Codeforces Round 908 (Div. 2))(思维题)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

(动手学习深度学习)第7章 残差网络---ResNet

目录 ResNet总结 ResNet代码实现ResNet的梯度计算 ResNet 总结 残差块使得很深的网络更加容易训练 甚至可以训练一千层的网络 残差网络对随后的深层神经网络设计产生了深远影响&#xff0c;无论是卷积类网络还是全连接类网络。 ResNet代码实现 导入相关库 import torch fro…

K8S容器内安装cur/telnet命令(Alpine Linux离线环境安装curl/telnet或其他工具)

背景 需求&#xff1a; 微服务的基础是镜像&#xff0c;通常在最小化的Linux镜像中安装jdk&#xff0c;然后运行编译好的java程序。将镜像运行到K8S上就得到了微服务Pod&#xff0c;Pod通常使用安装K8S时配置的私有网段&#xff0c;与宿主机不同。很多时候需要排查从Pod网段内…

概念解析 |移动群智感知:智能设备时代的数据革命

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:移动群智感知(Mobile Crowd Sensing, MCS)。 移动群智感知:智能设备时代的数据革命 移动群智感知示意图 背景介绍 随着智能手机和物联网设备的普及,我们进入了一个全新的…

《未来之路:技术探索与梦想的追逐》

创作纪念日 日期&#xff1a;2023年07月05日文章标题&#xff1a;《从零开始-与大语言模型对话学技术-gradio篇&#xff08;1&#xff09;》成为创作者第128天 在这个平凡的一天&#xff0c;我撰写了自己的第一篇技术博客&#xff0c;题为《从零开始-与大语言模型对话学技术-…

【Docker】iptables命令的使用

iptables是一个非常强大的Linux防火墙工具&#xff0c;你可以使用它来控制网络流量的访问和转发。 前面已经学习了iptables的基本原理&#xff0c;四表五链的基本概念&#xff0c;也已经安装好了iptables&#xff0c;下面我们主要学习iptables命令的基本使用。 可以使用iptable…

Redis持久化之RDB和AOF操作

文章目录 前言一、什么是RDB&#xff1f;1.与持久化相关的一些配置2.触发机制3.如何恢复rdb文件4.优点5.缺点 二、什么是AOF&#xff1f;1.重写规则说明2.优点3.缺点 总结 前言 无论是面试还是工作&#xff0c;持久化都是重点! Redis是内存数据库&#xff0c;如果不将内存中的…

阿里云AIGC小说生成【必得京东卡】

任务步骤 此文真实可靠不做虚假宣传&#xff0c;绝对真实&#xff0c;可截图为证。 领取任务 链接&#xff08;复制到wx打开&#xff09;&#xff1a;#小程序://ITKOL/1jw4TX4ZEhykWJd 教程实践 打开函数计算控制台 应用->创建应用->人工智能->通义千问 AI 助手-…

【字符串】【双指针翻转字符串+快慢指针】Leetcode 151 反转字符串中单词【好】

【字符串】【双指针翻转字符串快慢指针】Leetcode 151 反转字符串中单词 解法1 双指针翻转字符串快慢指针更新数组大小 ---------------&#x1f388;&#x1f388;题目链接&#x1f388;&#x1f388;------------------- ---------------&#x1f388;&#x1f388;解答链接…