• LeetCode第876题—链表的中间结点


    本次写的题目是链表的中间结点,为LeetCode里面的题目,让我们来康康是如何解出这道题目的吧,各位尚没有思路的小伙伴可以跟随着博主的解题思路一步步来,感受一下😎

    🌱分析阶段

    这是一道很经典的题目,我们需要用到一个小技巧:快慢结点

     快慢结点:该技巧有多种使用情况,在本题目中即为创建两个结点,一个只是一步一步地走,另一个结点则两步两步地走,依次达到快的那个结点走到链表末的时候,慢结点刚好到达链表中间位置

    我们将快结点用quick表示,慢结点就用cur表示,图示如下👇:

     📢总结:要得到中间结点,我们只需要像上面的两张图一样,创建一个快结点和一个慢结点,之后快结点两步两步走,慢结点一步一步走,等到快结点走到null位置或者快结点的next域为null的时候,此时的慢结点的位置就是中间结点的位置。


    🌱代码阶段

    在写代码的时候,我们有了上面总结的普遍情况的解决方法后,要再先思考有无特殊情况,本题由于要用到快结点,所以我们要判断会不会该链表有  头结点为null    该链表只有一个结点的情况出现  ,至此,先写出下面的特殊情况下的代码👇:

    1. class Solution {
    2. public ListNode middleNode(ListNode head) {
    3. if(head==null) return null; //链表为空的时候,直接返回null
    4. if(head.next==null) return head; //链表中只有一个结点的时候,该结点就为中间结点
    5. }
    6. }

    接下来就是普遍情况下的代码编写,我们可以根据上面的总结来写出代码👇:

    1. class Solution {
    2. public ListNode middleNode(ListNode head) {
    3. if(head==null) return null;
    4. if(head.next==null) return head;
    5. ListNode cur = head;
    6. ListNode next = head;
    7. while(next!=null&&next.next!=null){ //单数链表或双数链表的情况
    8. cur = cur.next;
    9. next = next.next.next;
    10. }
    11. return cur;
    12. }
    13. }

    ❗❗注意❗❗:在这里的代码中有一个地方要注意→while语句中的  next!=null    next.next!=null  位置不可以交换!!!否则会有空指针异常的风险

    综上,便是全部代码,让我们来跑一下逝逝吧😎

    nice😎✨


    以上!便是全部的啦😎

    又是收获满满的一天~

  • 相关阅读:
    操作系统笔记(王道考研) 第三章:内存管理
    Tensorflow 2.x 模型-部署与实践
    第27章_瑞萨MCU零基础入门系列教程之freeRTOS实验
    SpringBootAdmin环境搭建与使用
    CommonsCollection1反序列化链学习
    网络安全(黑客)自学
    智能座舱的「交互设计」大战
    Android使用高德地图实现运动轨迹绘制和轨迹回放
    重生之我是一名程序员 37
    数据结构实验6 :图的存储与遍历(邻接矩阵的深度优先遍历DFS和邻接表的广度优先遍历BFS)
  • 原文地址:https://blog.csdn.net/Green_756/article/details/126296254