zoukankan      html  css  js  c++  java
  • LeetCode-环形链表|+环形链表||

    此文转载自:https://blog.csdn.net/weixin_45313447/article/details/111823636

    环形链表 | 和 || 题型相似且 || 是 | 的升级版,故放一起。

    1.题 | 如下:
    在这里插入图片描述
    2.题目分析:
    返回的是一个布尔型的结果,如果有环返回true,无环返回false。
    在这里插入图片描述
    3.源代码:

    bool hasCycle(struct ListNode *head) {
        if(head==NULL)
        return false;
        struct ListNode *solw=head;
        struct ListNode *fast=head;
        while(fast && fast->next){
            solw=solw->next;
            fast=fast->next->next;//使快指针比慢指针快二步
            if(solw==fast){
                return true;//快慢指针相遇即有环
            }
        }
        return false;//无环
    }
    

    1.题 || 如下:
    在这里插入图片描述
    在这里插入图片描述
    2.题目分析:
    在这里插入图片描述
    3.源代码:

    struct ListNode *detectCycle(struct ListNode *head) {
        struct ListNode* slow=head;
        struct ListNode* fast=head;
        while(fast&&fast->next){
            slow=slow->next;
            fast=fast->next->next;
            if(fast==slow)
            break;//判断有环
        }
        if(fast==NULL||fast->next==NULL){
            return NULL;//无环情况
        }
        else{
        struct ListNode* meet=slow;
        while(1){//由题目分析推断关系得如下且用while(1)死循环
            if(meet==head)
            break;//一定是先判断保证情况二也可以考虑到
            head=head->next;
            meet=meet->next;
        }
        return meet;  
        }
        return 0;
    }
    

    4.总结:

    1.解决类似问题以及链表中的问题可以多考虑用快慢指针解决。
    2. 解决的第二题为什么快指针要比慢指针快二倍不可以是别的:
    如果是三步:X X-2 X-4 X-6…如果X是奇数快慢指针就会错过不会像两步一样每走一步之间的距离每缩小一步。类推别的也就不可以。

       

    更多内容详见微信公众号:Python测试和开发

    Python测试和开发

  • 相关阅读:
    动态添加placeholder
    texworks编码问题
    c++ 小知识(不定期更新)
    写一个简单的 Makefile
    ubuntu 忘了密码
    遍历各种组合
    分形
    C++ 尾递归优化
    基于 QQBot 实现简易 QQ 机器人
    遇到问题:在函数中开辟动态内存(已解决)
  • 原文地址:https://www.cnblogs.com/phyger/p/14202924.html
Copyright © 2011-2022 走看看