• 剑指offer-15.链表中倒数第k个节点


    0 题目

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

    1 分析

    经典的双指针题。

    一个指针,当k==0的时候,每次循环向下走一步,知道另一个指针为nullptr

    ListNode *FindKthToTail(ListNode *pListHead, unsigned int k)
    {
        ListNode *ret = pListHead;
        ListNode *end = pListHead;
    
        while (end != nullptr)
        {
            if (k == 0)
            { //ret 在k=0的时候,表示 end 已经先走了k步
                ret = ret->next;
            }
            else
            {
                --k;
            }
            end = end->next;
        }
        // 在end==nullptr 的时候k还不为0 ,也就是end还没走上k步。
        // 也就是说链表长度不足k
        if (k != 0)
        {
            return nullptr;
        }
        else
        {
            return ret;
        }
    }
    

      

    或者是另一种写法

    ListNode *FindKthToTail(ListNode *pListHead, unsigned int k)
    {
        ListNode *pre = pListHead;
        ListNode *cur = pListHead;
    
        // pre 先走k步,如果pre==nullptr那么就return nullptr
        // 原因在于链表没有k那么长
        for (int i = 0; i < k; i++)
        {
            if (pre == nullptr)
            {
                return nullptr;
            }
            pre = pre->next;
        }
    
        while (pre != nullptr)
        {
            pre = pre->next;
            cur = cur->next;
        }
    
        return cur;
    }
    

      

  • 相关阅读:
    第三章 kubernetes核心原理
    Jmeter
    Docker 入门学习
    第二章 Kuberbetes实践指南
    第一章 Kubernetes入门
    java中的引用与ThreadLocal
    Disruptor极速队列
    Redis设计与实现——单机数据库的实现
    Redis设计与实现——数据结构与对象
    python装饰器
  • 原文地址:https://www.cnblogs.com/perfy576/p/8607005.html
Copyright © 2020-2023  润新知