当前位置:网站首页>第一讲:链表中环的入口结点
第一讲:链表中环的入口结点
2022-07-07 22:21:00 【奋斗吧!骚年!】
题目:链表中环的入口结点
给定一个链表,若其中包含环,则输出环的入口节点。
若其中不包含环,则输出null。
数据范围
节点 val 值取值范围 [1,1000]。
链表长度 [0,500]。
样例
给定如上所示的链表:
[1, 2, 3, 4, 5, 6]
2
注意,这里的2表示编号是2的节点,节点编号从0开始。所以编号是2的节点就是val等于3的节点。
则输出环的入口节点3.
题目解析:
方法一:哈希表
我们可以使用unordered_set,来保存节点指针,如果发现有相同的指针(set的大小不变),则表示是入口节点
方法二:快慢指针
原理:快指针每次走两步,慢指针每次走一步,如果有环则一定会相遇
如图,假设慢指针从a走到b最后与快指针相遇于c,如果慢指针返回到b点,则快指针会返回到d点(因为会多走y步)
那么我们可以发现当慢指针走到b点,那么快指针就会走到d点(因为回退得出的),那么x+y就会是圈的整数倍(其实可能快指针已经在圈里走过很多圈了,但是这不影响,相当于取余操作)
最后我们将慢指针移到起点,两个指针走同样的步数,则就会在入口相遇(因为快指针已经走了y步,再走x步肯定会在b点,而慢指针走x步也会在b点)
执行次数:x+y+2x+2y+2x=5x+3y(因为x+y小于总长度,所以时间复杂度0(n))
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
public:
ListNode *entryNodeOfLoop(ListNode *head) {
if(!head)return NULL;
set<ListNode *> s;
while(head->next)
{
int size=s.size();
s.insert(head);
if(size==s.size())return head;
head=head->next;
}
return NULL;
}
};
边栏推荐
- Cmake learning notes (1) compile single source programs with cmake
- paddle入门-使用LeNet在MNIST实现图像分类方法二
- 80%的人答错,苹果logo上的叶子到底朝左还是朝右?
- Development of a horse tourism website (realization of login, registration and exit function)
- Go learning notes (2) basic types and statements (1)
- The difference between get and post
- 2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量:
- redis你到底懂不懂之list
- QT creator add JSON based Wizard
- An error is reported during the process of setting up ADG. Rman-03009 ora-03113
猜你喜欢

Jouer sonar

Automated testing: robot framework is a practical skill that 90% of people want to know

【测试面试题】页面很卡的原因分析及解决方案

51与蓝牙模块通讯,51驱动蓝牙APP点灯

搭建ADG过程中复制报错 RMAN-03009 ORA-03113

【編程題】【Scratch二級】2019.12 飛翔的小鳥

QT and OpenGL: loading 3D models using the open asset import library (assimp) - Part 2

How to insert highlighted code blocks in WPS and word

redis你到底懂不懂之list

应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设
随机推荐
去了字节跳动,才知道年薪 40w 的测试工程师有这么多?
What if the testing process is not perfect and the development is not active?
Reptile practice (VIII): reptile expression pack
ROS从入门到精通(九) 可视化仿真初体验之TurtleBot3
Stm32f1 and stm32cubeide programming example - rotary encoder drive
Robomaster visual tutorial (11) summary
【史上最详细】信贷中逾期天数统计说明
The standby database has been delayed. Check that the MRP is wait_ for_ Log, apply after restarting MRP_ Log but wait again later_ for_ log
C# 泛型及性能比较
A brief history of information by James Gleick
CoinDesk评波场去中心化进程:让人们看到互联网的未来
An error is reported during the process of setting up ADG. Rman-03009 ora-03113
Cmake learning notes (1) compile single source programs with cmake
[programming problem] [scratch Level 2] March 2019 draw a square spiral
某马旅游网站开发(对servlet的优化)
Emotional post station 010: things that contemporary college students should understand
The difference between -s and -d when downloading packages using NPM
Solution to the problem of unserialize3 in the advanced web area of the attack and defense world
2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量:
STM32F1与STM32CubeIDE编程实例-旋转编码器驱动