C++每日一练10.判断链表中是否有环

Posted 鱼酱2333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++每日一练10.判断链表中是否有环相关的知识,希望对你有一定的参考价值。

链表判断是否有环

数学法

 * Definition for singly-linked list.
 * struct ListNode 
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) 
 * ;

class Solution 
public:
    bool hasCycle(ListNode *head) 
        ListNode* fast = head;
        ListNode* slow = head;

        while(fast != nullptr && fast->next != nullptr)
        
            fast = fast->next->next;//快指针每次向后走两步
            slow = slow->next;//慢指针走一步
            if (fast == slow)//快慢指针相遇,有环
                return true;
        

        return false;
    
;

使用map法


 struct ListNode 
     int val;
     ListNode *next;
    ListNode(int x) : val(x), next(NULL) 
 ;

class Solution 
public:
    bool hasCycle(ListNode *head) 
        map<ListNode*,int> mp; // 定义一个哈希表存储结点指针
        while(head)  // 不断遍历结点
            if(mp[head])  //如果这个结点出现过
                return true;
            
            // 如果没有出现过,那么标记为1,表示出现过了
            mp[head]=1;
            head=head->next;
        
        return false;
    
;

以上是关于C++每日一练10.判断链表中是否有环的主要内容,如果未能解决你的问题,请参考以下文章

「 每日一练,快乐水题 」141. 环形链表

算法题:判断链表中是否有环

链表oj---->判断链表中是否有环

C++每日一练16.合并两个排序的链表

牛客网高频算法题系列-BM6-判断链表中是否有环

Hash算法的概念及应用如何判断链表中是否有环