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

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

🌱分析阶段

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

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

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

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


🌱代码阶段

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

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

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

class Solution {
    public ListNode middleNode(ListNode head) {
        if(head==null) return null;
        if(head.next==null) return head;
        ListNode cur = head;
        ListNode next = head;
        while(next!=null&&next.next!=null){    //单数链表或双数链表的情况
            cur = cur.next;
            next = next.next.next;
        }
        return cur;
    }
}

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

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

nice😎✨


以上!便是全部的啦😎

又是收获满满的一天~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值