| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 哈希表题目:环形链表 -> 正文阅读 |
|
[数据结构与算法]哈希表题目:环形链表 |
题目标题和出处标题:环形链表 出处:141. 环形链表 难度2 级 题目描述要求给你一个链表的头结点 head \texttt{head} head,判断链表中是否有环。 如果链表中有某个结点,可以通过连续跟踪 next \texttt{next} next 指针再次到达,则链表中存在环。评测系统内部使用 pos \texttt{pos} pos 表示链表尾结点的 next \texttt{next} next 指针连接到的结点下标(下标从 0 \texttt{0} 0 开始)。如果 pos \texttt{pos} pos 是 -1 \texttt{-1} -1,则在该链表中没有环。注意 pos \texttt{pos} pos 不作为参数进行传递。 如果链表中存在环,则返回 true \texttt{true} true。否则,返回 false \texttt{false} false。 示例示例 1: 输入:
head
?
=
?
[3,2,0,-4],
?
pos
?
=
?
1
\texttt{head = [3,2,0,-4], pos = 1}
head?=?[3,2,0,-4],?pos?=?1 示例 2: 输入:
head
?
=
?
[1,2],
?
pos
?
=
?
0
\texttt{head = [1,2], pos = 0}
head?=?[1,2],?pos?=?0 示例 3: 输入:
head
?
=
?
[1],
?
pos
?
=
?
-1
\texttt{head = [1], pos = -1}
head?=?[1],?pos?=?-1 数据范围
进阶你是否可以使用 O(1) \texttt{O(1)} O(1) 空间解决此问题? 解法一思路和算法如果链表中存在环,则链表的尾结点的 next \textit{next} next 指针指向链表中的一个结点,被指向的结点为链表开始入环的结点。从链表的头结点 head \textit{head} head 开始遍历链表,如果链表存在环,则在访问尾结点之后会重复访问链表开始入环的结点。 如果链表中没有环,则任何结点都不会被重复访问。 因此可以遍历链表,根据是否有结点被重复访问判断链表中是否有环。为了判断是否有结点被重复访问,可以使用哈希集合存储访问过的结点。 在遍历链表的过程中将访问到的每个结点加入哈希集合。如果在遍历过程中遇到一个结点已经在哈希集合中,则链表中存在环,返回 true \text{true} true。如果遍历链表结束到达 null \text{null} null 时仍没有遇到已经在哈希集合中的结点,则链表中没有环,返回 false \text{false} false。 代码
复杂度分析
解法二思路和算法判断链表中是否有环的另一个常用的方法是快慢指针。 初始时,快指针和慢指针都位于链表的头结点。每次将快指针移动两步,慢指针移动一步,在至少移动一次的情况下,如果快慢指针相遇则链表中存在环。 如果链表中存在环,则两个指针在移动过程中都会进入环,然后在环内移动。当两个指针都在环内移动时,一定存在一次移动,使得快指针和慢指针相遇。 如果链表中不存在环,则在至少移动一次的情况下,快指针总是在慢指针的前面,快指针将会先到达链表末尾。 由此可以使用快慢指针判断链表中是否有环。将快慢指针同时从链表的头结点开始移动,每次将快指针移动两步,慢指针移动一步,直到遇到终止条件:
代码
复杂度分析
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 14:55:12- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |