【数据结构】链表OJ面试题3(题库+解析)

1.前言 

前五题在这http://t.csdnimg.cn/UeggB

后三题在这http://t.csdnimg.cn/gbohQ

记录每天的刷题,继续坚持!

2.OJ题目训练

9. 给定一个链表,判断链表中是否有环。

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

思路

快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表其实位置开始运行, 如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。比如:操场跑步

以这个环形链表距离,当我们指针进环后,相当于进入了2 0 -4的循环,我们可以将这三步类比成在环形操场跑步

可以假设A和B在操场同一个起点开始跑步,A的速度是一次跑一米,B的速度是一次跑两米

以此来进行当A跑半圈时,B已经跑完一圈了,而当A跑一圈时,B也跑完两圈了,这样他们就在起点相遇了。

我们就可以利用这一特性,类比到环形数组中。

注意要点

  1. 环形链表是没有尾指针的(没有下一个节点为NULL),利用这个特性我们第一步可以很轻松的判断是否为环形节点
  2. 避免越界访问(限制条件)

附源代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    struct ListNode *first = head ,*slow = head;
    while(first!=NULL&&first->next!=NULL && slow->next!=NULL)   //防止越界访问报错
    {
        first = first->next->next;  
        slow = slow->next;
        if(first == slow)
        {
            return true;
        }
    }
    return false;
}

【扩展问题】

为什么快指针每次走两步,慢指针走一步可以?

假设链表带环,两个指针最后都会进入环,快指针先进环,慢指针后进环。当慢指针刚 进环时,可能就和快指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度。 此时,两个指针每移动一次,之间的距离就缩小一步,不会出现每次刚好是套圈的情 况,因此:在满指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。

快指针一次走3步,走4步,...n步行吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/375749.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

工业以太网交换机引领现代工厂自动化新潮流

随着科技的飞速发展,现代工厂正迎来一场前所未有的自动化变革,而工业以太网交换机的崭新角色正是这场变革的关键组成部分。本文将深入探讨工业以太网交换机与现代工厂自动化的紧密集成,探讨这一集成如何推动工业生产的智能化、效率提升以及未…

UDP端口探活的那些细节

一 背景 商业客户反馈用categraf的net_response插件配置了udp探测, 遇到报错了,如图 udp是无连接的,无法用建立连接的形式判断端口。 插件最初的设计是需要配置udp的发送字符,并且配置期望返回的字符串, [[instances]] targets…

VSCode无法启动:Waiting for server log...

问题基本情况 [13:30:20.720] > code 1.86.0 (commit 05047486b6df5eb8d44b2ecd70ea3bdf775fd937) [13:30:20.724] > Running ssh connection command... /var/fpwork/reiss/vscdata/server/cplane/.vscode-server/code-05047486b6df5eb8d44b2ecd70ea3bdf775fd937 comman…

【RT-DETR有效改进】轻量级下采样方法ContextGuided(参数量下降700W,轻量又涨点)

👑欢迎大家订阅本专栏,一起学习RT-DETR👑 一、本文介绍 本文给大家带来的是改进机制是一种替换Conv的模块Context Guided Block (CG block) ,其是在CGNet论文中提出的一种模块,其基本原理是模拟人类视觉系统依赖上…

centos 7.6 安装cas 对接ldap 单点登录实战

centos 7.6 安装cas 对ldap 单点登录实战 1、安装前准备工作1.1、centos 7.6 安装JDK 1.81.2、centos 7 安装tomcat 9.0.841.3、windows10 安装JDK 1.81.4、windows10 安装打包工具 maven 3.9.6 2、下载cas 5.3 并打包成war包3、部署cas到tomcat4、cas对接ldap 1、安装前准备工…

SQL注入讲解-BeesCMS系统漏洞分析溯源

判断网页框架 渗透思路 以前的思路 1.首先识别一下指纹 根据指纹查找历史漏洞(同样适用现在) 2.查找目录(目录里面会有很多惊喜) 通过御剑后台扫描工具找到文件夹后在网页打开文件夹进行测试 通过百度搜索查看历史漏洞 查看源代码发现它对账号和密码只有二个加密 我们通过bu…

LeetCode:26.删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣(LeetCode) 目录 题目: 思路: 代码注释: 每日表情包: 题目: 思路: 没啥特殊的,老老实实双指针遍历数组,&#xff0…

谷歌seo搜索引擎优化教程有吗?

教程,教学,指南,这些东西哪里都有,尤其是关于seo相关方面的,这些可以说到处都是,能把谷歌seo这个关键词做上去的,可以说就是实力的证明了,在这里我们说一个无论是老手还是新手都应该…

archlinux 使用 electron-ssr 代理 socks5

提前下载好 pacman 包 https://github.com/shadowsocksrr/electron-ssr/releases/download/v0.2.7/electron-ssr-0.2.7.pacman 首先要有 yay 和 aur 源,这个可以参考我之前的博客 虚拟机内使用 archinstall 安装 arch linux 2024.01.01 安装依赖 yay 安装的&#…

Linux下centos操作系统安装Mysql8.0过程及踩坑填补

我自己有一台服务器,之前安装的是MySQL5.5,现在我想升级为MySQL8.0,于是我干了以下操作,既有踩坑又有干货: 1.先卸载MySQL; 2.删除跟MySQL相关文件; 3.安装新的MySQL8.0版本(这里踩了一个坑&…

破除Github API接口的访问次数限制

破除Github API接口的访问次数限制 1、Github介绍2、Github API接口2.1 介绍2.2 使用方法 3、Github API访问限制3.1 访问限制原因3.2 访问限制类别 4、Github API访问限制破除4.1 限制破除原理4.2 限制破除示例 1、Github介绍 Github,是一个面向开源及私有软件项目…

VS2017+Qt中文无法编译通过newline in constant解决办法

首先说我的解决办法 Tools->Extensions and Updates… 安装ForceUTF8(with BOM) 注意Force这个插件有好几个版本,一定要withBOM!!!我之前安装的没有BOM导致改了各种设置还是一直编译不过,差点没气死我 另外代码里…

Mac电脑删除第三方软件的最简单方法(2024最新教程)

Mac用户经常会下载各种第三方软件来提高工作效率或娱乐体验。然而,随着时间的推移,一些软件可能不再需要,或者用户可能想要清理空间。在这种情况下,有效地删除这些第三方软件变得尤为重要。本文将介绍几种常规的Mac删除第三方软件…

react+antd+CheckableTag实现Tag标签单选或多选功能

1、效果如下图 实现tag标签单选或多选功能 2、环境准备 1、react18 2、antd 4 3、功能实现 原理: 封装一个受控组件,接受父组件的参数,数据发现变化后,回传给父组件 1、首先,引入CheckableTag组件和useEffect, useMemo, use…

动态规划01 三步问题[C++]

​​​​​​ 图源:文心一言 上机题目练习整理,本篇作为动态规划的代码,因为做题入门很少找到带图的讲解(难道是因为太简单,所以没有人嘛),所以干脆自己写一份,供小伙伴们参考~&am…

CSS的动画

CSS的动画 在本节,我们将学习keyframes动画。 1. 动画的基本使用 1. 定义动画 定义动画有两种写法: 简单定义方式 keyframes 动画名 {/* from代表初始状态 */from {/*property1:value1*/transform: translate(0%);}/* to代表结束状态 */to {transfor…

Win32 SDK Gui编程系列之--弹出式菜单

1.弹出式菜单 例如,在命令提示窗口中点击鼠标右键,会出现如下图所示的弹出菜单(下拉菜单)。 这种弹出式菜单的实现很简单。不创建菜单栏,用CreatePopupMenu函数创建的菜单是最顶端的菜单就可以了。 菜单的显示使用TrackPopupMenu函数进行。 例如,点击鼠标右键显示弹出…

JAVA装饰器模式详解

装饰器模式 1 装饰器模式介绍 装饰模式(decorator pattern) 的原始定义是:动态的给一个对象添加一些额外的职责. 就扩展功能而言,装饰器模式提供了一种比使用子类更加灵活的替代方案. 假设现在有有一块蛋糕,如果只有涂上奶油那这个蛋糕就是普通的奶油蛋糕, 这时如…

[职场] 智能材料与结构专业的就业前景 #经验分享#学习方法

智能材料与结构专业的就业前景 智能材料与结构专业是面向国家智能制造强国战略,面向地方经济新旧动能转换需求,学习智能材料与结构的基础理论及基本知识,接受智能材料制备、组织分析、性能测试、智能材料系统集成技能的基本训练,…

蓝桥杯省赛无忧 课件127 线段树维护哈希

01 问题引入 02 算法思路 03 代码实现 04 例题讲解