算法通关村第一关---链表经典问题之链表的中间结点笔记

算法通关村第一关—链表经典问题之链表的中间结点笔记

源码地址:GitHub-算法通关村

题目地址:LeetCode

image-20230719084432412

解题思路:

  1. 初始化两个指针 slowfast,它们都指向链表的头节点 head
  2. 在循环中,同时移动 slowfast 指针。每次迭代,slow 指针向前移动一步,而 fast 指针向前移动两步。
  3. 循环的条件是 fast 不为 null 并且 fast.next 不为 null。这样做的目的是确保在每次迭代时,fast 指针都至少能够移动两步,避免出现空指针异常。
  4. fast 到达链表末尾时,即 fastnull 或者 fast.nextnull,循环结束。
  5. 最终返回 slow 指针的位置,即链表的中间节点。由于 fast 指针每次移动两步,而 slow 指针每次移动一步,所以当循环结束时,slow 指针正好指向链表的中间节点。

这种快慢指针法的原理在于,快指针的速度是慢指针的两倍,所以当快指针到达链表末尾时,慢指针刚好在链表的中间位置。

/**
     * 快慢指针
     *
     * @param head
     * @return
     */
    public ListNode middleNode(ListNode head) {
        ListNode slow = head, fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
        }
        return slow;
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值