当前位置:网站首页>第一讲:链表中环的入口结点
第一讲:链表中环的入口结点
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;
}
};
边栏推荐
- The underlying principles and templates of new and delete
- The difference between -s and -d when downloading packages using NPM
- Is 35 really a career crisis? No, my skills are accumulating, and the more I eat, the better
- 在网页中打开展示pdf文件
- 詹姆斯·格雷克《信息简史》读后感记录
- ROS from entry to mastery (IX) initial experience of visual simulation: turtlebot3
- [programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
- What if the testing process is not perfect and the development is not active?
- 应用实践 | 数仓体系效率全面提升!同程数科基于 Apache Doris 的数据仓库建设
- 用語雀寫文章了,功能真心强大!
猜你喜欢
【测试面试题】页面很卡的原因分析及解决方案
Tencent security released the white paper on BOT Management | interpreting BOT attacks and exploring ways to protect
"An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points
全自动化处理每月缺卡数据,输出缺卡人员信息
Opengl3.3 mouse picking up objects
Operating system principle --- summary of interview knowledge points
爬虫实战(八):爬表情包
【编程题】【Scratch二级】2019.12 飞翔的小鸟
Seven years' experience of a test engineer -- to you who walk alone all the way (don't give up)
Stm32f1 and stm32cubeide programming example - rotary encoder drive
随机推荐
Single machine high concurrency model design
服务器防御DDOS的方法,杭州高防IP段103.219.39.x
Flask learning record 000: error summary
Cause analysis and solution of too laggy page of [test interview questions]
2022-07-07:原本数组中都是大于0、小于等于k的数字,是一个单调不减的数组, 其中可能有相等的数字,总体趋势是递增的。 但是其中有些位置的数被替换成了0,我们需要求出所有的把0替换的方案数量:
The result of innovation in professional courses such as robotics (Automation)
智慧监管入场,美团等互联网服务平台何去何从
[C language] objective questions - knowledge points
80%的人答错,苹果logo上的叶子到底朝左还是朝右?
【推荐系统基础】正负样本采样和构造
Robomaster visual tutorial (11) summary
Sqlite数据库存储目录结构邻接表的实现2-目录树的构建
Database query - what is the highest data?
[programming questions] [scratch Level 2] March 2019 garbage classification
QT and OpenGL: loading 3D models using the open asset import library (assimp) - Part 2
STM32F1與STM32CubeIDE編程實例-旋轉編碼器驅動
How to add automatic sorting titles in typora software?
从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值
[programming problem] [scratch Level 2] draw ten squares in December 2019
备库一直有延迟,查看mrp为wait_for_log,重启mrp后为apply_log但过一会又wait_for_log