一分钟解决链表问题---链表的中间结点

此题为力扣链表题目:

📌 文章目录:

1️⃣.题目解析

2️⃣.代码实现

3️⃣.全部代码

题目:

在这里插入图片描述

1️⃣.题目解析

题目所需:得到链表的中间结点,如果结点个数为单数,得到的是中间的结点,如果结点的个数为双数得到的是两个中间结点靠后的那个结点,此题运用到快慢指针的思想,快指针每次走两步,慢指针每次走一步,就可以得到中间结点

在这里插入图片描述

2️⃣.代码实现

步骤一、先判断链表是不是空,如果为空,无法进行操作,直接返回 null

if (head == null){
        return null;
    }

步骤二、定义两个结点类型变量,都指向头结点,用于遍历链表

ListNode fast = head ;
ListNode slow = head;

步骤三、利用循环使快慢指针去移动,因为 fast 每次走两步,所以以 fast 的位置作为循环的条件,首先是 fast 不可以为空,由于fast 每次走两步,所以fast.next 不可以为空,循环条件 && 两边的条件不可以换位置,因为只有先fast 不为空,fast.next 才可以进行判断是不是空

while(fast != null && fast.next != null){
        fast = fast.next.next;
        slow = slow.next;
    }

在这里插入图片描述

在这里插入图片描述

步骤四、返回 slow 即链表的中间结点

return slow;

3️⃣.全部代码

class Solution {
    public ListNode middleNode(ListNode head) {
    if (head == null){
        return null;
    }
    ListNode fast = head ;
    ListNode slow = head;
    while(fast != null && fast.next != null){
        fast = fast.next.next;
        slow = slow.next;
    }
    return slow;
    }
}

在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦の澜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值