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

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

141.环形链表

思路:快慢指针 or 哈希表

快慢指针代码:

cpp 复制代码
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;
    }
};

哈希表代码:

cpp 复制代码
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 哈希表

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

代码:

cpp 复制代码
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;
    }
};
相关推荐
要努力学习ψ(`∇´)ψ1 小时前
红黑树详解
开发语言·数据结构·c++
~糖炒栗子~2 小时前
[Day 12]904.水果成篮
数据结构·c++·算法·leetcode
Adunn2 小时前
算法基础 - 二分查找
数据结构·c++·算法
HUT_Tyne2652 小时前
力扣--283.移动零
数据结构·算法·leetcode
ALISHENGYA2 小时前
全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(while循环应用)
开发语言·数据结构·c++·算法
久睡成瘾.4462 小时前
《代码随想录》Day29打卡!
数据结构·算法
迪小莫学AI2 小时前
检测相邻递增子数组 II - LeetCode 3350 解题思路与代码解析
数据结构·算法·leetcode
青青丘比特2 小时前
List ---- 模拟实现LIST功能的发现
开发语言·数据结构·c++·stl·list
_星辰大海乀2 小时前
List-顺序表--2
java·开发语言·数据结构·算法·list·idea
袁庭新2 小时前
Redis数据结构ZipList和QuickList原理解析
java·数据结构·redis·redis数据结构·ziplist·quicklist·袁庭新