返回一个链表的倒数第k个节点

题目描述

输入一个链表,输出该链表中倒数第k个结点。
如果该链表长度小于k,请返回空。

image

题目分析
首先明确,一个链表中,倒数的+顺数的长度等于链表总长度,所以可以设置两个指针,一个先走K步,剩下的到链表的末尾要走的步数就是倒数第k个节点,需要从头开始走的步数。所以我们可以画出如下图
image

根据这个逻辑,我们设置两个指针,其中一个先走k步(这个k就是我们要求的倒数第几个的这个几),然后在用一个指针同时跑,然后第一个走到结尾,第二个指针的位置对应的数字就是我们要求的

 public ListNode FindKthToTail (ListNode pHead, int k) {
        // write code here
        //定义一个开始指针
        ListNode first = pHead;
        for(int i = 0;i<k;i++){
            if(first==null){
                return first;  //这里是如果节点为空就返回first,这个时候的first就是空
            }
            first = first.next;
        }
        //定义第二个指针
        ListNode second = pHead;
        //同时移动,当第一个指针移动到最后,第二个指针的位置就是我们要求的值
        while(first!=null){
            first = first.next;
            second = second.next;
        }
        
        return second;
    }
posted @   Diamond-fz  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示