每日一题---OJ题: 返回倒数第 k 个节点

news2024/11/24 13:01:50

片头

嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题---返回倒数第k个结点,准备好了吗? 我们开始咯!

比如: 总共有5个结点,分别为 1->2->3->4->5 , 找倒数第一个结点,也就是"5"

题目很容易理解,我们先提供第一种思路

思路一:  假设链表长度为 n , 题目要求返回倒数第 k 个结点,那么我们就从前往后数,从第一个结点开始,跳 n-k 次,最终找到这个结点,并且返回

代码如下:

typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k){
        //求链表长度
        int len = 0;
        ListNode* pcur = head;
        while(pcur!=NULL){
            pcur = pcur->next;
            len++;
        }

        //倒数第k个结点
        //从第一个结点开始,跳4次,跳 n-k 次
        pcur = head;
        int count = len-k;
        while(count--){
            pcur = pcur->next;
        }
        return pcur->val;//返回该节点的值
}

 那有没有另外一种思路呢? 当然有,我们一起来看看吧~

思路二: 定义2个指针,也就是快慢指针,快指针先走 k 步, 再两个指针一起走,直到快指针指向空。

初始时,fast 和 slow 指针都指向头结点

fast 指针先走 k 步,假如这里 k = 3,我们求倒数第3个结点,fast指针走到"4"的位置

接着让 slow 和 fast 指针一起往后走,直到 fast 指向空

第一次:

第二次:

此时 fast 指针指向空, slow指针指向的结点刚好是倒数第3个结点,返回slow指向结点的数据域

代码如下:

typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k){
        ListNode* fast = head;//初始时,fast指针指向头结点
        ListNode* slow = head;//初始时,slow指针指向头结点

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

        while(fast != NULL){  //当fast指针不为空时,进入循环
            fast = fast->next;//fast指针走一步
            slow = slow->next;//slow指针走一步
        }
//此时slow指针指向的结点就是倒数第k个结点,返回slow指针指向结点的数据值
        return slow->val;     
}

 嗯,还有一种思路但是和思路2类似,我们一起来看看

思路3: 定义2个指针,也就是快慢指针,快指针先走 k-1 步, 再两个指针一起走,直到快指针的next指针指向空。

初始时, fast 指针和 slow 指针都指向头结点。

 

fast 指针先走 k-1 步,假如这里 k = 3,我们求倒数第3个结点,fast指针走到"3"的位置

我们再让slow指针和fast指针一起走, 直到fast的next指针为空

第一次:

第二次:

此时,fast 的next指针指向空, 那么退出循环

代码如下:

typedef struct ListNode ListNode;
int kthToLast(struct ListNode* head, int k){
        ListNode* fast = head;//定义一个fast指针,初始时指向头结点
        ListNode* slow = head;//定义一个slow指针,初始时指向头结点

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

        while(fast->next != NULL){  //当fast的next指针不为空时,进入循环
            fast = fast->next;      //fast指针走一步
            slow = slow->next;      //slow指针走一步
        }  

        return slow->val;           //最后返回slow指针指向结点的数据域
}

片尾

今天我们学习了一道OJ题: 返回倒数第 k 个结点,希望能对看完这篇文章的友友们有所帮助 !   !  !

点赞收藏加关注 !   !   !

谢谢大家 !   !   !

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

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

相关文章

大数据实训进行时:数据标注项目

数据标注项目 培训目的 让同学们先熟悉理论知识,如:识别障碍物是否满足拉框的要求,如何进行拉框;熟悉标注操作,培养出能够进入正式项目的人员 培训地点 理论:学术报告厅、阶梯教室 实操:1实…

LeetCode-32. 最长有效括号【栈 字符串 动态规划】

LeetCode-32. 最长有效括号【栈 字符串 动态规划】 题目描述:解题思路一:辅助栈解题思路二:动态规划解题思路三:0 题目描述: 给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且…

Redis的RDB文件

Redis持久化 Redis是操作内存的,所以是内存数据库,断电即失,所以需要持久化 RDB 文件名:dump.rdb # The filename where to dump the DB dbfilename dump.rdb在指定时间间隔内,将内存中的数据,集体快照写入磁盘内&…

linux如何使 CPU使用率保持在指定百分比?

目录 方法1:(固定在100%) 方法2:(可以指定0~100%) 方法3:使用ChaosBlade工具(0~100%) 方法1:(固定在100%) for i in seq 1 $(cat /pro…

Leetcode算法训练日记 | day25

一、组合总和Ⅲ 1.题目 Leetcode:第 216 题 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺…

gemini1.5 API调用

https://ai.google.dev/pricing?hlzh-cn 查询可用的model https://generativelanguage.googleapis.com/v1beta/models?keyxxx 使用postman调用 https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-pro-latest:generateContent?keyxxx https://ai.google…

数学基础:矩阵

来自: https://www.shuxuele.com/algebra/matrix-determinant.html 一、矩阵的行列式 二、矩阵简单知识 三、矩阵乘法 四、单位矩阵 五、逆矩阵一:简单2阶矩阵求法 六、逆矩阵二:3、4阶逆矩阵求法 6.1 求余子式矩阵 6.2 求代数余子式矩阵 6.3 求伴随矩阵…

练习题(2024/4/13)

1长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1&am…

WebService反向代理的配置和

WebService反向代理的配置和 家都知道,联网上有很多被墙了的网站,虽然这是让人很伤心的一件事情,但还好咱们有办法绕过这个限制,那就是使用IP代理。今天我就来给大家讲讲如何配置和使用WebService反向代理。 什么是WebService反向…

【AR】使用深度API实现虚实遮挡

遮挡效果 本段描述摘自 https://developers.google.cn/ar/develop/depth 遮挡是深度API的应用之一。 遮挡(即准确渲染虚拟物体在现实物体后面)对于沉浸式 AR 体验至关重要。 参考下图,假设场景中有一个Andy,用户可能需要放置在包含…

整体性学习

整体性学习的顺序: 1.获取 2.理解(明白)3.拓展(探究)4.纠错(调试)5.应用 测试伴随每一个过程 例如: 吃饭(去学习)–>点菜(学什么&#xff0c…

VRRP——虚拟路由冗余协议

什么是VRRP 虚拟路由冗余协议VRRP(Virtual Router Redundancy Protocol)是一种用于提高网络可靠性的容错协议。 通过VRRP,可以在主机的下一跳设备出现故障时,及时将业务切换到备份设备,从而保障网络通信的连续性和可…

Excel中输入数字会改变怎么办?

一、数字显示不全,以“#”号代替 随着列宽的缩小,数字逐渐被“#”号代替(首先数字的格式是“数值型,且只有整数”) 原因分析:单元格中的数字无法完全显示,Excel会自动用“#”号填充剩余的空间 解…

【好用】推荐10套后端管理系统前端模板

后台管理系统前端模板是开发者在构建后台管理系统时使用的一种工具,它提供了预先设计好的界面和组件,以帮助开发者快速搭建出功能完善、用户体验良好的管理系统。以下是V哥整理的10款流行的后台管理系统前端模板,它们基于不同的技术栈和设计理…

亚马逊跨境电商崛起,武汉星起航引领新手卖家抢占全球市场

随着全球化的深入推进,跨境电商已成为连接世界贸易的重要桥梁。作为全球最大的电商平台之一,亚马逊正以其强大的物流网络和庞大的用户基础,引领跨境电商业务迅速崛起。业内专家分析指出,亚马逊跨境电商市场有望在未来几年内继续保…

机器学习—数据集(二)

1可用数据集 公司内部 eg:百度 数据接口 花钱 数据集 学习阶段可用的数据集: sklearn:数据量小,方便学习kaggle:80万科学数据,真实数据,数据量大UCI:收录了360个数据集,覆盖科学、生活、经济等…

A Learning-Based Approach for IP Geolocation(2010年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Eriksson B, Barford P, Sommers J, et al. A learning-based approach for IP geolocation[C]//Passive …

C++---vector容器

是STL容器中的一种常用的容器,由于其大小(size)可变,常用于数组大小不可知的情况下来替代数组。vector容器与数组十分相似,被称为动态数组。时间复杂度为O(1)。 数组数据通常存储在栈中,vector数据通常存储…

算数逻辑单元

目录 一、王道考研ppt总结 二、个人理解 一、王道考研ppt总结 二、个人理解 74181是一款经典的ALU 可以进行加减乘除和与或非、异或等计算;还有移位和求补等 输入有一个CU信号,即控制单元信号,有一个M信号,当M为1时,进…

VBOX ubuntu20.04 安装好后无法启动 terminal 是什么原因?

这种情况通常是 字符问题 先点开 Settings ----> Region & Language , 如下 把系统的语言和地区设置成一致的 再参考这里 https://blog.csdn.net/u010092716/article/details/130968032 再参考这里 https://blog.csdn.net/pxy7896/article/details/135216651 然后重…