首页 > 其他分享 >141.环形链表 & 142.环形链表II

141.环形链表 & 142.环形链表II

时间:2025-01-07 23:30:10浏览次数:3  
标签:II head slow ListNode nullptr 环形 fast next 链表

141.环形链表 & 142.环形链表II

141.环形链表

思路:快慢指针 or 哈希表

快慢指针代码:

class Solution {
public:
    bool hasCycle(ListNode *head) {
        if(head==nullptr||head->next==nullptr)
        return false;
        ListNode *fast=head->next; //不能设置成head,否则不进入while循环
        ListNode *slow=head;
        while(fast!=slow){
            //如果无环fast在slow前面,只需要判断fast
            if(fast->next!=nullptr&&fast->next->next!=nullptr){
                fast=fast->next->next;
                slow=slow->next;
            }else{  //无环
                return false;
            }
        }
        return true;
    }
};

哈希表代码:

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        unordered_set<ListNode*> hash;
        ListNode* cur=head;
        while(cur!=nullptr){
            //哈希表中出现过
            if(hash.count(cur)){
                return cur;
            }
            hash.insert(cur);
            cur=cur->next;
        }
        return nullptr;
    }
};

142.环形链表II

思路:快慢指针+数学推导 or 哈希表

哈希表同前,数学推导见下图,

在这里插入图片描述

代码:

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode *slow = head, *fast = head;
        while (fast != nullptr) {
            slow = slow->next;
            if (fast->next == nullptr) {
                return nullptr;
            }
            fast = fast->next->next;
            if (fast == slow) {
                ListNode *ptr = head;
                while (ptr != slow) {
                    ptr = ptr->next;
                    slow = slow->next;
                }
                return ptr;
            }
        }
        return nullptr;
    }
};

标签:II,head,slow,ListNode,nullptr,环形,fast,next,链表
From: https://blog.csdn.net/czy0316/article/details/144995837

相关文章

  • 代码随想录训练营第三十七天| 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ 70. 爬楼
    完全背包理论直接的说明就是把01背包的有限次选取变为无限次选取求最大价值相对的遍历方向也可以相互调换因为dp[j]只需要上次的计算结果就行 publicclassCarlcodeAllBag{publicstaticvoidtestCompletePack(){//先遍历物品再遍历背包int[]......
  • 面试经典150题——链表(二)
    文章目录1、删除链表的倒数第N个结点1.1题目链接1.2题目描述1.3解题代码1.4解题思路2、删除排序链表中的重复元素II2.1题目链接2.2题目描述2.3解题代码2.4解题思路3、旋转链表3.1题目链接3.2题目描述3.3解题代码3.4解题思路4、分隔链表4.1题目链接4.2......
  • 数据结构与算法-单链表
    单链表链表的介绍既然顺序存储中的数据因为挤在一起而导致需要成片移动,那很容易想到的解决方案是将数据离散地存储在不同内存块中,然后在用来指针将它们串起来。这种朴素的思路所形成的链式线性表,就是所谓的链表。上图中,所有的节点均保存一个指针,指向其逻辑上相邻的下一......
  • 链表实现多项式的相加相减以及修改指定指数系数
    #include<iostream>usingnamespacestd;//定义多项式节点结构typedefstructPolyNode{intcoaf;//系数intexpn;//指数structPolyNode*next;//指向下一个节点的指针}PolyNode,*Poly;//创建多项式节点PolycreateNode(intcoaf,inte......
  • 剑指Offer|LCR 023. 相交链表
    LCR023.相交链表给定两个单链表的头节点headA和headB,请找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交**:**题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例1......
  • IIS中快速更新网站后端文件的脚本
    如下::约定的文件夹:publish,backup/yyyyMMdd_HHmmss,updatefiles@echooffsetlocalenabledelayedexpansion::获取当前日期和时间for/f"tokens=1-8delims=/:."%%ain('wmicosgetlocaldatetime^|find"."')do(setDATETIME=%%a)::......
  • 代码随想录算法训练营第二十八天-贪心算法-122. 买卖股票的最佳时机II
    有奇妙的解法分析要获得利润,就是当天卖出前一天买入的的利润,也就是当天价格减去前一天的价格通过这样的运算,可以得到一个新的序列,这个序列就是上一道53的最大子序和的应用了而且把这些子序和中所有正数值都加到一起就是最大利润了#include<iostream>#include<vector>c......
  • Matlab去除CT扫描得到的图像的环形伪影
    Matlab去除CT扫描得到的图像的环形伪影列表RingCorrection/autolim.m , 592RingCorrection/autothresh.m , 449RingCorrection/CenterDetermination.m , 3317RingCorrection/CenterDetermination.prj , 34364RingCorrection/centerofmass.m , 538RingCorrection/......
  • WebAudioContext.createIIRFilter
    IIRFilterNodeWebAudioContext.createIIRFilter(Array.feedforward,Array.feedback)小程序插件:不支持功能描述创建一个IIRFilterNode参数Array.feedforward一个浮点值数组,指定IIR滤波器传递函数的前馈(分子)系数。Array.feedback一个浮点值数组,指定IIR滤波器传递......
  • 如何在Windows IIS 7.5或以上版本中配置ThinkPHP的伪静态规则?
    请将以下代码另存为web.config文件,注意后缀是.config,可以先保存在记事本中,重命名,然后上传到网站根目录中,即可生效。<?xmlversion="1.0"encoding="UTF-8"?><configuration><system.webServer><rewrite><rules>&l......