【数据结构与算法 经典例题】返回单链表的倒数第 k 个节点

 

                                                     

                                               💓 博客主页:倔强的石头的CSDN主页 

                                               📝Gitee主页:倔强的石头的gitee主页

                                        ⏩ 文章专栏:数据结构与算法刷题系列(C语言)

                                                                期待您的关注

目录

一、问题描述

二、解题思路

方法一:计数器方式

方法二:双指针方式

三、C语言代码实现

方法一:计数器方式

方法二:双指针方式


一、问题描述

二、解题思路

方法一:计数器方式

  • 最多遍历两次链表
  • 时间复杂度  O  (n)
  • 空间复杂度  O(1)
  • 先遍历链表,求出链表长度count
  • 倒数第k个节点,就是正数第count-k+1个节点(下标为count-k)
  • 再次遍历链表,找到该节点,返回数据

方法二:双指针方式

  • 最多遍历一次链表
  • 时间复杂度  O  (n)
  • 空间复杂度  O(1)
  • 定义两个指针slow和fast,初始都指向第一个节点
  • 初始fast指针先走k步
  • 然后slow指针和fast指针每次各走一步,当fast指针指向空时,slow指针所指向的节点就是倒数第k个节点
  • 返回该节点的数据

 1.快慢指针初始位置

2.快指针先走k步

3.快指针走到NULL,慢指针走到倒数第k个节点

三、C语言代码实现

方法一:计数器方式

//返回单链表的倒数第 k 个节点
struct ListNode {int val;struct ListNode* next;
};
typedef struct ListNode ListNode;//方式一 计数器方式
int kthToLast1(struct ListNode* head, int k)
{ListNode* pcur = head;//遍历节点的指针int count = 0;while (pcur)//求出链表长度{pcur = pcur->next;count++;}pcur = head;count = count - k;while (count--)//找到该节点{pcur = pcur->next;}return pcur->val;
}

方法二:双指针方式

//方式二 快慢指针方式
int kthToLast2(struct ListNode* head, int k)
{ListNode* slow = head, * fast = head;while (k--)//快指针先走k步{fast = fast->next;}while (fast){fast = fast->next;slow = slow->next;}return slow->val;
}

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

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

相关文章

第七十九节 Java面向对象设计 - Java访问级别

Java面向对象设计 - Java访问级别 类简单名称是 class 关键字和 {)之间的名称。 当我们通过简单的名称引用一个类时,编译器在引用类所在的同一个包中查找该类声明。 我们可以使用全名来引用一个类如下。 com.w3cschool.Dog aDog;指定类的访问级别的一般语法是 &…

Aleth-NeRF: Illumination Adaptive NeRF with Concealing Field Assumption

Abstract Aleth-NeRF: 带有隐蔽场假设的照明自适应 NeRF 照明照明标准的神经辐射场(NeRF)范例采用了一种以观察者为中心的方法,将光照和材料反射的各个方面仅仅从3D 点发射纠缠在一起。这种简化的渲染方法在准确建模在不利光照条件下捕获的图像方面提出了挑战,如弱光或过度曝…

npm install node-sass 安装失败的解决方案:利用国内镜像加速安装

在开发前端项目时,使用Sass作为CSS预处理器是很多开发者的选择。然而,在通过npm安装其Node.js绑定库node-sass时,一些开发者可能会遇到安装失败的问题,尤其是网络原因导致的下载缓慢或中断。本文将指导你如何通过更换为国内镜像源…

linux内部pthread_create函数创建设置栈大小方法

pthread_create函数是Unix/Linux下创建线程的函数,它的原型如下: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); 其中,pthread_attr_t是用来设置线程属性的,…

The 2022 ICPC Asia Nanjing Regional Contest - External G

题目链接:Problem - D - Codeforces 写在前面:今天的训练赛打的稀碎,一道稍微难一点的签到题就把我难住了,看完题解确实感觉不难,看来题目还是刷太少了。 回归正题 题意: 思路:尽量让分子大,分…

【NumPy】深入了解NumPy的multiply函数:高效矩阵和数组乘法指南

🧑 博主简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向…

HNU-人工智能-作业3

人工智能-作业3 计科210X 甘晴void 202108010XXX 1.贝叶斯网络 根据图所给出的贝叶斯网络,其中:P(A)0.5,P(B|A)1, P(B|A)0.5, P(C|A)1, P(C|A)0.5,P(D|BC)1,P(D|B, C)0.5&#xff…

1. 基于时间序列分析的股票价格波动预测模型:深度探索与实际应用

在当今经济环境下,股票市场无疑是投资者们密切关注的重要领域。然而,股票价格的波动常常令投资者感到困扰,难以捉摸其变化规律。因此,构建一种能够有效预测股票价格波动趋势的模型显得尤为重要。本文将深入探讨基于时间序列分析的…

循环buffer“一写多读“

1.往期回顾 一个简单实用的循环buffer,用于缓冲数据!测试500M数据,耗时1.3秒。 C语言版本的循环buffer比C版本的速度更快!测试500M数据0.5秒,达9.25Gbps左右! C 语言免拷贝版本循环 buffer 比拷贝版本快了…

Golang并发编程-协程goroutine的信道(channel)

文章目录 前言一、信道的定义与使用信道的声明信道的使用二、信道的容量与长度三、缓冲信道与无缓冲信道缓冲信道无缓冲信道四、信道的初体验信道关闭的广播机制总结前言 Goroutine的开发,当遇到生产者消费者场景的时候,离不开 channel(信道)的使用。 信道,就是一个管道,…

Redis介绍及安装配置

1 什么是Redis Redis 的定义:Redis(Remote Dictionary Server 远程字典服务)是一个开源的使用C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 可见Redis和我们最经常使用的MySQL都…

7-1 Java程序设计-异常处理-自定义异常类

题目: 定义一个具有三条边的三角形类Triangle。在三角形中,任意两边之和大于第三边。三角形类Triangle写遵从这一个规则。定义一个IllegalTriangleException类,修改类Triangle的构造方法,如果创建的三角形的边违反了这一规则&am…

技术创新加速生态繁荣 | 软通动力子公司鸿湖万联亮相OpenHarmony开发者大会2024

5月25日,由开放原子开源基金会OpenHarmony项目群工作委员会主办的OpenHarmony开发者大会2024在深圳成功举行。本次大会紧扣OpenHarmony 4.1 Release版本发布契机,以“鸿心聚力,智引未来”为主题、通过“1场主论坛6场技术分论坛”承载&#xf…

谈谈关于mysql索引的理解

索引 我们在学习java中用来表示数组的下标例如定义一个变量int i 这就表示一个索引,因为索引的英文单词是index,索引也可以称为是书的目录,它可以方便我们查询自己所需要的内容,通过索引我们可以快速找到自己的需求.此时引出了索引的概念,在数据库中. 关于索引的相关操作 有…

mysql 8 [HY000][1114] The table ‘/tmp/#sql4c3_3e5a0_2‘ is full

分组有个比较大的表,出现了临时表空间满了的情况; 试用该sql 语句: SHOW GLOBAL VARIABLES LIKE internal_tmp_mem_storage_engine; 可以看到 默认临时结果是用临时表存的,在mysql的my.cnt可以改临时空间的大小 但是磁盘哪有内…

【竞赛】本科阶段部分证书考试 科研竞赛 的 网站导航(算法、项目、安全、数据、科研)

【竞赛】本科阶段部分证书考试 & 科研竞赛 的 网站导航(算法、项目、安全、数据、科研) 文章目录 1、算法竞赛(重点)PAT/CSP天梯赛/蓝桥/力扣ICPC算法竞赛编程工具代码源其他 2、项目竞赛安全与数据(重点&#xf…

5.28学习总结

java复习总结 hashcode()和equals() hashcode():在Object里这个方法是通过返回地址的整数值来生成哈希值。 equals():在Object里这个方法是通过比较他们的内存地址来确定两个对象是否相同。 运行效率:hashcode的时间复杂度为O(1)(因为只要计算一次哈…

js 对象内的方法this不指向对象?js对象中this指向的问题

缘起 今天在写一个工具方法封装成对象模块导出时,由于成员方法内调用了其他成员方法,而且成员方法用了箭头函数() > 定义,导致使用 this.成员方法() 不能调用该成员方法,console.log(this)发现为 undefined。 export default {…

Vue 菜单组件开发教程

在 Vue 项目中&#xff0c;我们常常需要构建各种菜单结构。下面就来详细介绍如何基于给定的代码来开发一个菜单组件。 组件部分 一、模板部分 <template> <template v-for"item in menuTree" :key"item._id"> <el-sub-menu v-if"i…

opencv的findContours()函数

来自WaTab AI Pro 请详细解释cv2.findContours()&#xff1a; cv2.findContours() 是 OpenCV 中用于检测图像轮廓的函数。轮廓可以看作是将连续的点&#xff08;沿边界&#xff09;连接在一起的一条曲线&#xff0c;具有相同的颜色或强度。该函数常用于图像处理和计算机视觉中…