当前位置: 首页 > news >正文

力扣刷题Days11第二题--141. 环形链表(js)

目录

1,题目

2,代码

2.1快慢指针

2.2,哈希表

3,学习与总结

3.1自己尝试写快慢指针 反思


1,题目

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

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

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

2,代码

2.1快慢指针

/*** Definition for singly-linked list.* function ListNode(val) {*     this.val = val;*     this.next = null;* }*//*** @param {ListNode} head* @return {boolean}*/
var hasCycle = function(head) {if (head === null || head.next === null) {return false;}let slow = head;let fast = head.next;while (slow !== fast) {if (fast === null || fast.next === null) {return false;}slow = slow.next;fast = fast.next.next;}return true;};

2.2,哈希表

哈希表中存储的是 每个节点的引用地址,通过判定引用地址是否再次被指向,判定是否有环形链表的存在;

/*** Definition for singly-linked list.* function ListNode(val) {*     this.val = val;*     this.next = null;* }*//*** @param {ListNode} head* @return {boolean}*/
var hasCycle = function(head) {const hashtable = new Set()while(head != null){if(hashtable.has(head)){return true}hashtable.add(head);head = head.next;}return false;};

3,学习与总结

3.1自己尝试写快慢指针 反思

(1)为什么比较‘slow !== fast’而不是‘slow.val !== fast.val’?

我们在判断链表是否有环时关注的是节点的引用(或内存地址)是否相同,而不仅仅是节点值是否相等;

  • 节点引用(内存地址)比较:

'slow' !='fast' 确保我们检查的两个指针是否指向链表的同一个节点;

  • 节点值比较:

'slow.val !== fast.val'比较节点值是否相等;

在环形链表的场景下,slowfast 指针最终会指向同一个节点,这不仅仅意味着它们的值相等,而是它们确实指向同一个物理位置或内存地址。这是检测链表中环存在的可靠方法。

(2)为什么是要是‘ if (fast === null || fast.next === null) ’?

作用:用于在追踪链表中的可能环形结构时算法的安全性和准确性;

终止条件的检测:在非环形链表中,末尾节点的'next'属性是null。因此:

  • fast === null 检查是为了判断快指针是否已经超出了链表的最末端,即快指针已经没有指向任何节点。
  • fast.next === null 检查是为了判断快指针的下一个步骤是否会超出链表的最末端。因为快指针每次移动两步,如果快指针的下一步就是链表的末端,那么它就没有下一个“next”节点可以进一步移动到,这也表明链表中不存在环。

预防空指针异常:在许多编程语言中,尝试访问null的属性或方法会导致空指针异常(在JavaScript中称为TypeError)。

算法的正确性:如果链表中存在环,快慢指针最终会在环内的某个位置相遇;而如果快指针达到了链表的末尾(fast === nullfast.next === null),这意味着链表不可能有环。

快指针移动速度:在算法中,快指针(fast)每次移动两步,而慢指针(slow)每次移动一步。如果链表中存在环,快指针最终会追上慢指针,因为它们会在环内的某个点相遇。但如果链表中没有环,快指针会先达到链表的末尾。

相关文章:

力扣刷题Days11第二题--141. 环形链表(js)

目录 1,题目 2,代码 2.1快慢指针 2.2,哈希表 3,学习与总结 3.1自己尝试写快慢指针 反思 1,题目 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达&…...

微信自动回复的设置

最近有客户来咨询,说是因为做内容引流到微信,所以每天很多人加他,每天要手动通过好友申请后打招呼,每天花费大量的时间去回答重复的问题,很机械的重复这些事。就问我们系统有没有能帮她解决这个烦恼的功能。 我说呀&a…...

SpringBoot源码解读与原理分析(一)SpringBoot整体概述

文章目录 第1章 SpringBoot整体概述1.1 Spring Framework1.1.1 Spring Framework的历史1.1.2 IOC与AOP 1.2 Spring Boot与Spring Framework1.3 Spring Boot的核心特性1.4 Spring Boot的体系 第1章 SpringBoot整体概述 Spring Framework 开发团队 支持不依赖外部容器的Web应用程…...

如何选择VR全景设备,才能拍摄高质量的VR全景?

随着VR全景技术的不断成熟和发展,VR全景已经成为了摄影爱好者乐于尝试的新手段,VR全景也为广大用户提供了一个全新的视角来探索世界,如果想要拍摄出高质量的VR全景,选择合适的VR全景拍摄设备以及掌握正确的拍摄技巧才是关键。 VR全…...

Vue 3 中的 ref 和 reactive 有什么区别?

Vue 3 中的 ref 和 reactive 有什么区别? Vue 3 引入了 Composition API,作为对传统 Options API 的补充。在 Composition API 中,ref 和 reactive 是两个核心的函数,用于创建响应式数据。虽然它们的目标都是使数据变得响应式&am…...

【SpringBoot】mybaitsPlus的多数据源配置

📝个人主页:五敷有你 🔥系列专栏:SpringBoot ⛺️稳重求进,晒太阳 mybatisPlus的多数据源配置 适用于多种场景:纯粹多库、 读写分离、 一主多从、 混合模式等 目前我们就来模拟一个纯粹多…...

安卓Java面试题 1-10

🔥 1、简述Android的4大组件是哪些,它们的作用?🔥 Android的4大组件 1:Activity:Activity是Android程序与用户交互的窗口,是Android构造块中最基本的一种,它需要为保持各界面的状态…...

强化学习中动作价值函数和状态价值函数的联系区别?

在强化学习中,动作价值函数(Q函数)和状态价值函数(V函数)都是值函数,用于评估在不同状态或状态动作对下的值。它们之间存在联系,但有一些区别: 动作价值函数(Q函数&#…...

Vue-Router路由介绍和使用

vue属于单页面应用,路由就是根据浏览器路径不同,用不同的试图组件替换这个页面内容 开启路由功能 如图在创建项目时候勾选rouler 这样创建好的项目就有路由功能 下一步 不同的访问路径 展示不同的页面内容 路由配置 路由连接组件 浏览器会解析为超链接 …...

Waves 14 Complete:后期混音效果全套插件,打造专业级音质体验

Waves 14 Complete,这款专为Mac和Windows平台打造的后期混音效果全套插件,将为您的音乐创作之旅增添一抹亮色。Waves 14 Complete以其丰富的功能和出色的性能,赢得了众多音乐制作人的青睐。它集合了众多高质量的音频处理插件,涵盖…...

DC-2靶机详解

写写自己打DC-2的过程 使用工具 kali DC-2的靶机下载地址为:https://www.vulnhub.com/entry/dc-2,311/ 环境配置。 Kali和DC-2都设置为NAT模式,都为仅主机模式也可以。 信息收集 arp-scan -l nmap -sn 192.168.236.0/24 获取靶机ip:192.16…...

个人项目介绍4:三维园区篇

个人项目介绍: 地图铁路线路篇 地球卫星篇 火车站篇 三维园区篇 项目需求: 1.按比例全景显示三维园区 2.精确显示园区内设备设施 3.实时显示设备报警信息 4.显示园区内摄像监控设备,并可点击显示监控视频流 5.显示园区内的重大危险源和风险分布 …...

哪些公司在招聘GIS开发?为什么?

之前我们给大家整理汇总了WebGIS在招岗位的一些特点,包括行业、学历、工作经验等。WebGIS招聘原来看重这个!整理了1300多份岗位得出来的干货! 很多同学好奇,这些招GIS开发的都是哪些公司?主要是做什么的? …...

电脑自带dll修复在哪里,dll修复工具一键修复dll丢失问题

xinput1_3.dll文件是一个Windows操作系统中的动态链接库(DLL)文件,它是微软DirectX软件开发包的一部分,主要用于支持游戏控制器和其他输入设备的交互。这个文件是DirectInput API的一个组件,DirectInput是DirectX中处理…...

电商数据分析15——电商平台上的产品推荐系统优化策略

目录 写在开头1. 产品推荐系统的作用1.1 提升用户购物体验1.2 增加销售额和转化率 2. 数据分析在推荐系统中的应用2.1 用户行为数据分析2.2 个性化推荐算法优化2.3 多样性和新颖性的平衡 3. 推荐系统优化的实践案例3.1 案例分享:利用机器学习提升推荐准确度3.1.1. 背…...

华硕AMD主板开启TPM2.0支持

目录 配置问题设置开启 Firmware TPM开启 Security Device Support保存设置 检查 配置 主板:TUF Gaming B550m-e Wifi   BIOS: 3402 问题 今天更新Win11,告诉我不支持 TPM 2.0,导致更新失败。   网上搜这个问题,基本只提供了…...

Linux - 进程控制

1、进程创建 1.1、fork函数初识 在linux中fork函数时非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程&#xff1b; #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进…...

redis一些概念知识

一、redis是什么 Redis是一种非关系型数据库&#xff08;NoSQL&#xff09;&#xff0c;它主要以键值对存储数据。与传统的关系型数据库相比&#xff0c;Redis更注重内存操作和高性能&#xff0c;常被用作缓存系统或分布式存储系统。 以简单的比喻来解释Redis&#xff0c;可以…...

01.AJAX 概念和 axios 使用

01.AJAX 概念和 axios 使用 1. 什么是 AJAX ? 使用浏览器的 XMLHttpRequest 对象 与服务器通信 浏览器网页中&#xff0c;使用 AJAX技术&#xff08;XHR对象&#xff09;发起获取省份列表数据的请求&#xff0c;服务器代码响应准备好的省份列表数据给前端&#xff0c;前端拿…...

外包干了一周,技术明显倒退。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;2019年我通过校招踏入了南京一家软件公司&#xff0c;开始了我的职业生涯。那时的我&#xff0c;满怀热血和憧憬&#xff0c;期待着在这个行业中闯出一片天地。然而&#xff0c;随着时间的推移&#xff0c;我发现自己逐渐陷入…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求&#xff0c;设计一个邮件发奖的小系统&#xff0c; 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式&#xff08;Decorator Pattern&#xff09;允许向一个现有的对象添加新的功能&#xff0c;同时又不改变其…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

汽车生产虚拟实训中的技能提升与生产优化​

在制造业蓬勃发展的大背景下&#xff0c;虚拟教学实训宛如一颗璀璨的新星&#xff0c;正发挥着不可或缺且日益凸显的关键作用&#xff0c;源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例&#xff0c;汽车生产线上各类…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

并发编程 - go版

1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程&#xff0c;系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...