牛客网-C++剑指offer-第十四题(链表中倒数第k个结点)

《牛客网 剑指Offer前20题》 《剑指Offer》三天刷完剑指offer前言知识面试题1:二维数组中的查找 三天刷完剑指offer 前言知识 优秀的程序员首先要有良好的基本功,基本功在面试编程环境体现在:编程语言、数据结构和算法。   编程语言:以C语言为例,例如把const加在指针不同位置有什么区别。主要考察对编程语言掌握程度。   数据结构:要熟练掌握链表、树、栈、队列和哈希表等数据结构,对链表的插入和删除节点了如指掌,... 阅读详情

题目描述

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

 

解题思路:这个题比较基础,主要考察链表的操作。两个思路:1.先将链表进行遍历,用vector将每个数据进行存储,然后直接找到某个数 2.先遍历链表,记录节点个数,再一次遍历,将数据取出

 

参考答案(时间复杂度大于O(n)):

#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <algorithm>
#include <math.h>

using namespace std;

struct ListNode {
    int val;
    struct ListNode *next;
};


class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {

        if (pListHead == NULL)
        {
            cout<<"pListHead = NULL fault"<<endl;
            return NULL;
        }


        int count = 1;
        ListNode* pmove = pListHead;

        while (pmove != NULL)
        {
            pmove = pmove->next;
            count++;
        }

        k = count - k;

        if (k <= 0)
        {
            cout<<"k <= 0 fault"<<endl;
            return NULL;
        }

        pmove = pListHead;
        for (int i = 0; i < k-1; ++i) {
            pmove = pmove->next;
        }

        return pmove;

    }
};

int main()
{
    //创建链表
    vector<int > array_list;

    Solution solution;

    //初始化链表内的参数
    ListNode ListNode3 = {3,NULL};
    ListNode ListNode2 = {2,&ListNode3};
    ListNode ListNode1 = {1,&ListNode2};

    //将头指针指向第一个链表的地址
    ListNode *head = &ListNode1;
    ListNode *my_result = NULL;

    my_result = solution.FindKthToTail(head,4);

    cout<<"result:"<<my_result->val<<endl;


    return 0;
}

 

优化代码:(使用vetocr进行存储,然后读取,时间复杂度为O(n))

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        if(pListHead == NULL)
            return pListHead;

        vector<ListNode*> arr_l_node;
        ListNode* my_head = pListHead;
        while (my_head != NULL)
        {
            arr_l_node.push_back(my_head);
            my_head = my_head->next;
        }

        if (k > arr_l_node.size())
            return pListHead;

        return arr_l_node[arr_l_node.size()-k];
    }
};

 

更加优化代码(使用两个指针,时间复杂度同样为O(n),空间复杂度优于前面两种)

class Solution {
public:
    ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
        //k如果等于0,因为是无符号数,k-1就变成了0xffffffff,而不是-1
        if(pListHead == NULL || k == 0)
            return pListHead;

        int count = 0;
        ListNode* P1;
        ListNode* P2;
        P1 = P2 = pListHead;

        //P2先走k-1步
        while (count < k-1)
        {
            //
            if (P2->next == NULL)
                return NULL;
            P2 = P2->next;
            count++;
        }

        //P1,P2一起走完
        while (P2->next != NULL)
        {
            P1 = P1->next;
            P2 = P2->next;
            count++;
        }

        return P1;
    }
};

 

ic后端学习笔记-floorplan floorplan是布图规划,规划包括定义芯片的大小,定义芯片内各种模块、hard macros(硬核。比如RAM,ROM及其他IP模块等)、IO等的大小和位置,有时候还需要提前定义一些placement blockages,groups/regions等等,是后端设计的第一步,也是后续所有P&R工作的基础。floorplan与placement的区别是。 阅读详情

相关推荐

NRF24L01学习操作教程(二)——NRF实现一对一,一对多通讯

以上内容详细介绍了,使用NRF24L01实现1对1单向通讯、1对1双向通讯、1对多双向通讯。

Joseph Wen的博客 7389

【剑指offer】14-链表中倒数第k个结点

1-Description 输入一个链表,输出该链表中倒数第k个结点链表定义如下: struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } };``` 2-Solution 第一种方法很容易想到,...

心之所向,敝履以往 250

RTKLIB使用方法(喂饭版)(三)——RTKPOST

应用OTL校正需要在“files”的“ocean loading BLQ format”中配置OTL文件。应用极潮需要在“files”的“EOP data file”配置ERP(地球旋转参数)文件。RAIM FDE:设置是否启用RAIM(接收机自主完整性监控)FDE(故障检测和排除)功能。点击下方的“save”可以把配置保存成文件,点击“load”就可以把配置文件加载出来。4接收机动态模型/地球潮汐矫正:设置流动站接收机动力学模型,只可以使用在DGPS/DGNSS或动态模型中。选择流动站天线的类型。

A2020713的博客 1万+

剑指Offer系列刷题笔记汇总

本文转自:个人网站:点击查看 一前言 二总结 链表-8道 二叉树12道 二叉搜索树3道 数组11道 字符串8道 栈3道 递归4道 回溯法2道 其他15道 一、前言 本系列文章为《剑指Offer》刷题笔记。 刷题平台:牛客网 书籍下载:共享资源 刷题刷的比较慢,花费了两个多月,终于将所有题目过了一遍,牛客网一共有66道题,这次刷题主要使用C++,接下来会使用Python...

Jack-Cui 5万+

IPD实战指南:如何运用SPAN模型精准定位高潜力市场并优化资源配置

本文是IPD实战指南,详细解析了如何运用SPAN模型进行市场分析与战略决策。文章通过四步实战法,指导企业科学定义细分市场、量化评估吸引力与竞争力,并绘制矩阵以制定精准的资源配置策略,从而跳出红海竞争,将资源聚焦于高潜力市场。

weixin_29306317的博客 75

winform自定义控件(gdi+)(1)———设置透明背景色

本文详细讲解了如何在winform中设置控件的背景色为透明色

qq_34059233的博客 3688

牛客网刷题之剑指offer:打印链表的倒数第k个结点

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、拿到题目如何分析?二、根据思路编写代码1.python(2.7)代码2.C++11(clang++3.9)代码总结 前言 题目地址 题目描述: 一、拿到题目如何分析? 遇到这种类型的题目,我们可以设置双指针p1和p2。第一个指针从链表的头指针向前走k-1,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始移动。由于两个指针的距离保持在k-1,当第一个p1(走在前面的)指针到达链表的尾结点时,第二个指针

代码届的小白的博客 495

PNP NPN线性接近开关接线嵌入式:详细指南与示例代码

在嵌入式系统中,PNP和NPN线性接近开关是常用的传感器类型,用于检测物体的接近或离开。在嵌入式系统中,PNP和NPN线制接近开关是常用的传感器类型,用于检测物体的接近或离开。本文提供了有关PNP和NPN线性接近开关接线的详细指南,并提供了一个简单的示例代码,以帮助您在嵌入式系统中正确使用这些传感器PNP NPN 线制接近开关接线 嵌入式:详细指南与示例代码。与PNP开关不同的是,NPN线性接近开关的正极连接至系统的正极电源。与PNP开关不同的是,NPN线制接近开关的正极连接至系统的正极电源。

CyberSphinx的博客 1272

关于牛客网剑指offer编程题思路(链表篇)

前言 最近在刷牛客网的剑指offer编程题,先从链表刷起。分别介绍每道题的思路,仅供题解参考和作个人总结,不包含代码,避免剧透。其中有一道题是包含二叉树的,就划到二叉树去,此处略过不表。 相关题目来源 牛客网剑指offer编程题_链表 解题思路 解题时需检查该节点是否存在,是否为NULL。 1. 链表中倒数第k个结点 需要两个指针,快指针先行k步后,快慢指针再同时前进,最...

weixin_40149887的博客 630

【数字孪生与仿真技术】14:数据驱动+机理模型:工业级混合建模实战(附MATLAB完整代码+案例解析)

摘要 本文针对工业建模中机理模型精度不足和数据驱动模型缺乏物理约束的痛点,提出混合建模技术作为解决方案。文章系统阐述了混合建模的3种主流架构(参数校正型、残差补偿型、组件替换型),结合清华大学催化裂化装置的实际案例,分析混合建模的工业应用价值。同时以连续搅拌反应釜(CSTR)为例,提供MATLAB环境下残差补偿型混合模型的完整实现代码,详细展示从机理模型构建到数据驱动补偿的全流程,并给出工程实践中的应对策略,为工业建模提供可落地的技术方案。 关键词 混合建模、机理模型、数据驱动、工业建模、MATLAB

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 622

第1章:认识OpenClaw

OpenClaw是一个开源的 AI 智能体 Gateway 网关项目名称演变:OpenClaw 原名 Clawdbot,因 Anthropic 商标顾虑在 2026年1月27日更名为 Moltbot(过渡名),最终在1月30日确定为 OpenClaw。三个名字本质是同一个项目,功能完全一致。🏠在你的电脑上运行:完全本地部署,数据隐私有保障📁访问本地文件:可以搜索、读取、编辑你电脑上的文件🔌扩展能力:通过Skills(技能)系统无限扩展功能💬多平台使用。

Maynor的博客 2834

剑指offer算法题014:链表中倒数第k个结点

小编在求职找找工作期间剑指offer上的算法题刷了很多遍,并且每道题小编当时都总结了一种最适合面试时手撕算法的最优解法。考虑到剑指offer算法题在面试中的高频出现,小编每天和大家分享一道剑指offer上的算法题,以及小编总结的答案。下面是第014道剑指offer算法题: 题目描述 输入一个链表,输出该链表中倒数第k个结点。 分析: 很经典的快慢指针思路,很多链表题都可以优先考虑这类解法 /* public class ListNode { int val; ListNode next

我的博客 330

华为OD机试真题 新系统 - 计算数列位置N的值 (Java/Py/C/C++/Js/Go)

本文整理华为 OD 机试新系统机考真题库,涵盖高频考点精析与完整题目内容,提供 C 语言、Java、C++、Python、Go、JavaScript 多语言源码实现,搭配详细解题思路讲解,并支持在线 OJ 刷题练习,助力高效备考华为 OD 机试新系统。

算法大师! 2011

剑指offer C++、Python版

一前言 二总结 链表-8道 二叉树12道 二叉搜索树3道 数组11道 字符串8道 栈3道 递归4道 回溯法2道 其他15道 一、前言 本系列文章为《剑指Offer》刷题笔记。 刷题平台:牛客网 书籍下载:共享资源 刷题刷的比较慢,花费了两个多月,终于将所有题目过了一遍,牛客网一共有66道题,这次刷题主要使用C++,接下来会使用Python重新过一遍,并对这些写过的文章进行更新。同...

YLC_慕类的博客 975

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

剑指offer--数组、链表中倒数第K个结点

开宗明义:本系列基于牛客网剑指offer,刷题小白,一天两道我快乐!旨在理解和交流,重在记录,望各位大牛指点! 牛客网-剑指offer 文章目录1、调整数组顺序使奇数位于偶数之前2、链表中倒数第K个结点 1、调整数组顺序使奇数位于偶数之前 描述:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并且保证奇数和奇数、偶数和偶...

qq_33948796的博客 305

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

剑指Offer(十四):链表中倒数第k个结点[链表]

牛客网刷题笔记记录。参考自:https://cuijiahua.com/blog/2017/12/basis_14.html 一.题目 输入一个链表,输出该链表中倒数第k个结点。 二.思路分析 我们可以定义两个指针。第一个指针从链表的头指针开始遍历向前走k-1,第二个指针保持不动;从第k步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指...

weixin_39568744的博客 159

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

python 链表倒数第k个节点_Day14:链表中倒数第k个结点

剑指Offer_编程题——链表中倒数第k个结点题目描述:输入一个链表,输出该链表的倒数第k个结点。具体要求:时间限制: C/C++ 1秒,其他语言2秒空间限制: C/C++32M,其他语言64M具体思路:思路一: 我们需要遍历出链表的长度,然后遍历出我们需要的倒数第k个结点,这是我们常规的想法,当然也考虑了代码的鲁棒性和空指针,k为0,k应该大于链表的长度。1、首先我们用Java实现该思路:pu...

weixin_39983427的博客 267

牛客网_剑指offer_链表中倒数第k个结点_c++

题目描述 输入一个链表,输出该链表中倒数第k个结点。 解题思路 利用前后指针的方法,第一个指针first先往前推移k步,第二个指针second放在开头,两者之间相差k步,然后同时向前推移,当first指针到达末尾的时候,可以根据second找到倒数第k个指针。 具体代码如下: /* struct ListNode { int val; struct ListNode *next; ListN...

方城的博客 221

牛客网-剑指offer编程题解答。

举个例子,数组{1,2,3,2,3} 当i=0时,index=numbers[i]=1, 小于length,index=1 numbers[index]=2 小于length,说明第一次访问 此时标记访问记录,numbers[index]=2+length; 即numbers[1]=2+length; 当i=1时,index=numbers[i]=2+length,大于ength,需要取得真实

dagon123的博客 842

链表中倒数第k个结点 — C++实现

题目描述 输入一个链表,输出该链表中倒数第k个结点。 牛客网题目链接 解题思路 直接思路是遍历链表,遍历的时候压栈,遍历完后出栈,倒数出k个就行。但这样肯定是拿不到Offer的。 可以这么做,拿两个指针从头遍历,让一个先走k-1步,然后两个指针再一起走,当先走的指针遍历到尾结点时,后走的那个即为所求。 有几个点需要注意: 输入空链表的处理 k为0的情况 k大于链表的长度 代码实现 class Solution { public: ListNode* FindKthToTail(ListNode*

Jeaten 432

《剑指offer》22--链表中倒数第 K 个结点[C++]

NowCoder 题目描述 输入一个链表,输出该链表中倒数第k个结点。 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 解题思路 设链表的长度为 N。设置两个指针 P1 和 P2,先让 P1 移动 K 个节点,则还有 N - K 个节点可以...

贫道绝缘子的博客 416

剑指offer_面试题22 : 链表中倒数第k个节点( python实现 )

链表中倒数第k个节点( python实现 ) 一、题目描述 题目:链表中倒数第k个节点 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。例如,一个链表有6个节点,从头节点开始,他们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。 二、解题思路   暂略。(此处主要作为书中python实现补充) 三、代...

UCASer 726

剑指offer刷题记录

剑指offer刷题记录 内容描述   本仓库链接:https://github.com/guyongpu/SwordOffer.git   本仓库为牛客网剑指offer题目的刷题记录,网址为:https://www.nowcoder.com/ta/coding-interviews ,点击跳转到剑指offer 每个题的代码放在src中,在main.cpp引入对应类的头文件,然后运行测试函数即可,例...

AlwaySimple的博客 411

剑指offer系列刷题笔记汇总

剑指Offer系列刷题笔记汇总 flyingsen 2018-06-04 09:37:29 352 收藏 分类专栏: 剑指offer 本文转自:个人网站:点击查看 一前言 二总结 链表-8道 二叉树12道 二叉搜索树3道 数组11道 字符串8道 栈3道 递归4道 回溯法2道 其他15道 一、前言 本系列文章为《剑指Offer》刷题笔记。 刷题平台:牛客网 书籍下载:共享资源 刷题刷的比较慢,花费了两个多月,终于将所有题目过了一遍,牛客

好想去看海 323

牛客网剑指Offer题解C++ (3/10)

一、调整整数数组使奇数位于偶数前面 题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 算法思想 这题我的想法是遍历数组,遇到偶数就将该偶数后面的前移移位,并将该偶数移到最后面,给一个值标记第一个偶数移的位置,当遍历到第一个偶数就完成了。 cla...

mrbacker的博客 490

剑指offer题解汇总

下面的链接有的没有提供面试题多少多少,是《剑指offer第二版》和牛客网剑指offer题目不是很匹配。 使用C++语言。 剑指offer-面试题 3-1:找出数组中重复的数字 剑指offer-面试题 3-2:不修改数组找出重复的数字 剑指offer-面试题5:替换空格 剑指offer-面试题 6:从尾到头打印链表 剑指offer-面试题 9:用两个栈实现队列 剑指offer-面试题1...

wchzh2015的博客 1446
上一篇: 牛客网-C++剑指offer-第十三题(调整数组顺序使奇数位于偶数前面)
下一篇: 牛客网-C++剑指offer-第十五题(反转链表)
L_smartworld
博客等级 码龄9年 56粉丝 268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值