【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)

作者 : admin 本文共1218个字,预计阅读时间需要4分钟 发布时间: 2024-06-16 共1人阅读

目录

一、前言

二、题目描述 

三、解题方法

⭐双指针 — 快慢指针 

🍑 思路一 

🍑 思路二

四、总结与提炼

五、共勉  


一、前言

       链表中倒数第 K 个节点这道题,可以说是–链表专题–,最经典的一道题,也是在面试中频率最高的一道题目,通常在面试中,面试官可能会从多个方面考察这道题目,所以大家需要对这道题目非常熟悉哦!!
      本片博客就来详细的讲讲解一下
链表中倒数第 K 个节点 的实现方法,让我们的面试变的更加顺利!!!

二、题目描述 

      给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号,请查找并返回倒数第 K 个训练项目编号。

【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)插图

 三、解题方法

这道题的解法还是可以用 快慢指针,但是稍微有点点不同。 

⭐双指针 — 快慢指针 

🍑 思路一 

 慢指针 slow 和 快指针 fast 一开始都指向头节点:

(1)fast 先走 k 步;
 
(2)slow 和 fast 同时走,fast 走到 NULL 时,slow 就是 倒数第 k 个。 

 假设链表元素为 1、2、3、4、5,要求输出该链表中倒数第 2 个结点,如图所示👇

【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)插图(1)

 这里直接动图演示循环的过程👇

【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)插图(2)

 🍑 思路二

慢指针 slow 和 快指针 fast 一开始都指向头节点: 

(1)fast 先走 k-1 步;
 
(2)slow 和 fast 同时走,fast 走到 尾节点 时,slow 就是 倒数第 k 个。 

假设链表元素为 1、2、3、4、5,要求输出该链表中倒数第 2 个结点,如图所示👇 

【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)插图(3)

这里还是直接动图演示循环的过程👇 

【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)插图(4)

 注意:如果 k 大于链表的长度,那么直接返回 NULL

代码: 

class Solution {
public:
    ListNode* trainingPlan(ListNode* head, int cnt) 
    {
        // 定义快慢指针
        ListNode* slow, *fast;
        // 开始都指向 头节点
        slow = fast = head;

        // fast 先走 cnt步
        while(cnt--)
        {
            // 如果 cnt 大于链表长度 ,那么直接返回 nullptr
            if(fast==nullptr)
            {
                return nullptr;
            }
            fast = fast->next;
        }

        // 当 fast 不为空指针时
        while(fast->next)
        {
            // slow 和 fast 同时走
            slow = slow->next;
            fast = fast->next;
        }
        // 当 fast 为 空指针 ,跳出循环,返回 slow
        return slow->next;
    }
};

 四、总结与提炼

        最后我们来总结一下本文所介绍的内容,本文讲解来一道力扣中有关 链表中倒数第 K 个节点的题目,这道题目是校招笔试面试中有关链表章节非常高频的一道题目大家下去一定要自己再画画图,分析一下,把这段代码逻辑自己实现一遍,才能更好地掌握 

五、共勉  

         以下就是我对 链表中倒数第 K 个节点 的理解,如果有不懂和发现问题的小伙伴,请在评论区说出来哦,同时我还会继续更新对 链表专题 的理解,请持续关注我哦!!! 

【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)插图(5)

本站无任何商业行为
个人在线分享 » 【算法专题–链表】链表中倒数第 K 个节点(图文详解,小白一看就懂!!!)
E-->