首页 > 其他分享 >141. 环形链表 ----- 哈希表、逆向思维、快慢指针

141. 环形链表 ----- 哈希表、逆向思维、快慢指针

时间:2022-11-16 11:45:57浏览次数:45  
标签:head ListNode 141 next 链表 ----- return false

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

 

示例 1:

 

 

 

 

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。
示例 2:

 

 

 

 

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。
示例 3:

 

 

 

 

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。
 

提示:

链表中节点的数目范围是 [0, 104]
-105 <= Node.val <= 105
pos 为 -1 或者链表中的一个 有效索引 。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/linked-list-cycle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

哈希表记录:

/**
 * 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) {
        unordered_set<ListNode*> Hash;
        while (head != nullptr) {
            if (Hash.count(head)) {
                return true;
            }
            Hash.insert(head);
            head = head->next;
        }
        return false;
    }
};

逆向思维:

class Solution {
public:
    bool hasCycle(ListNode *head) { 
        int k = 0;
        while (head && k < 10000) {
            head = head -> next;
            k++;
        }               
        if (head == NULL) return false;
        return true;
    }
};

 

快慢指针:

/**
 * 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) {
        if (!head) return false;
        if (!head -> next) return false;
        ListNode * fast = head -> next;
        ListNode * slow = head;        
        while (fast->next && fast->next->next) {
            if (fast == slow) { //绕一圈追上
                return true;
            }            
            slow = slow -> next;
            fast = fast -> next -> next;
        }
    return false;       
    }
};

 

 

标签:head,ListNode,141,next,链表,-----,return,false
From: https://www.cnblogs.com/slowlydance2me/p/16895345.html

相关文章

  • 洛谷题单【入门1】顺序结构-B2005 字符三角形
    题目描述给定一个字符,用它构造一个底边长 55 个字符,高 33 个字符的等腰字符三角形。输入格式输入只有一行,包含一个字符。输出格式该字符构成的等腰三角形,底......
  • WindowsAPI-WindowsAPI文档
    文档下载地址:  新编Windows_API_参考大全(真正完整版).zip......
  • 篇(12)-Asp.Net Core入门实战-在项目中加个应用层,为多层结构建立基础
    入门实战-在项目中加个应用层,为多层结构建立基础以上11篇的演练已经简单讲清楚了asp.netcore开发的一个(表)菜单管理的小功能,感兴趣的可以自行演练其他功能,演练熟悉即可。......
  • WindowsAPI-C#版_设备管理常用API
    #regionWindows设备管理-程序以管理员权限运行///<summary>///注册设备或者设备类型,在指定的窗口返回相关的信息///</summary>//......
  • Kafka(1)- producer
    前言本系列是kafka相关的第一篇,主要对kafka的producer和consumer进行介绍。此系列不会对kafka的原理进行介绍,因此需要读者有一定的kafka背景知识和使用经验。1.producer......
  • 什么是高防DNS?高防DNS有哪些作用?-中科三方
    传统解析技术在应对DNS劫持、DDoS攻击等情况已经力不从心,为了保障访客获得更畅通的访问体验,高防DNS成为众多政府和企业网站的更优选择。那什么是高防DNS?高防DNS具备哪些特......
  • el-tree变化:点击行相当于点击复选框
    现在el-tree增加了新功能:点击行就相当于点击了复选框。我记得以前是没有这个功能的,需要写代码处理下:参考链接elementtree点击该行即选中复选框......
  • Java-10接口与抽象类
    Java-10接口与抽象类抽象方法abstractmethod机制这是一个不完整的方法,它只有一个声明,没有方法体abstractvoidf();包含抽象方法的类被称为抽象类:如果一个类包含一......
  • 【Docker】容器使用规范--安全挂载建议
    容器挂载过程和安全挂载建议 绑定挂载本文所提到的挂载主要指绑定挂载(bindmount),即通过-v/xx/xx:/xx/xx和--mounttype=bind,xxx,xxx两种方式设置的容器挂载(其余doc......
  • Day6-1 三种初始化及下标越界
    三种初始化及内存分析Java内存:堆:存放new的对象和数组可以被所有的线程共享,不会存放别的对象引用栈:存放基本变量类型(会包含这个基本类型的具体数值)引用......