• 环形链表-力扣


    一、题目描述

    题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 

    二、题解 

    解题思路:

    快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环,则一定会在环中相遇,否则快指针率先走到链表的末尾。

    扩展:

     1、为什么快指针每次走两步,慢指针走一步可以?

    假设链表带环,两个指针最后都会进入环,快指针先进环,慢指针后进环。当慢指针刚进环时,可能就和快指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度。此时,两个指针每移动一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情况,因此:在慢指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。  

    2、快指针一次走3步,走4步,...n步行吗? 

    所以解决该题时,我们使用快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始运行,如果链表带环,则一定会在环中相遇。

    三、代码 

    1. public class Solution {
    2. public boolean hasCycle(ListNode head) {
    3. ListNode fast = head;
    4. ListNode slow = head;
    5. while (fast != null && fast.next !=null) {
    6. fast = fast.next.next;
    7. slow = slow.next;
    8. if(fast == slow) {
    9. return true;
    10. }
    11. }
    12. return false;
    13. }
    14. }

    另一种写法:

    1. public boolean hasCycle2(ListNode head) {
    2. ListNode fast = head;
    3. ListNode slow = head;
    4. while (fast != null && fast.next !=null) {
    5. fast = fast.next.next;
    6. slow = slow.next;
    7. if(fast == slow) {
    8. break;
    9. }
    10. }
    11. if (fast == null||fast.next == null) {
    12. return false;
    13. }
    14. return true;
    15. }

  • 相关阅读:
    【工作中遇到的性能优化问题】
    Redis (持续更新…)
    BIM轻量化技术简介
    xss.pwnfunction.com靶机 Warmups
    自动泊车的路径动态规划问题研究附Matlab代码
    开关按钮Switch
    微信小程序模板消息推送
    一次日常需求处理带给我的思考
    杨氏矩阵解法
    mmc命令(do_mmcops函数的源码分析)
  • 原文地址:https://blog.csdn.net/m0_61876562/article/details/133980206