当前位置:网站首页>第一讲:链表中环的入口结点
第一讲:链表中环的入口结点
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;
}
};
边栏推荐
- How does the markdown editor of CSDN input mathematical formulas--- Latex syntax summary
- What if the testing process is not perfect and the development is not active?
- [the most detailed in history] statistical description of overdue days in credit
- Problems faced when connecting to sqlserver after downloading (I)
- 服务器防御DDOS的方法,杭州高防IP段103.219.39.x
- If an exception is thrown in the constructor, the best way is to prevent memory leakage?
- 【史上最详细】信贷中逾期天数统计说明
- 51与蓝牙模块通讯,51驱动蓝牙APP点灯
- Les mots ont été écrits, la fonction est vraiment puissante!
- Play sonar
猜你喜欢
Robomaster visual tutorial (1) camera
Basic learning of SQL Server -- creating databases and tables with code
Development of a horse tourism website (optimization of servlet)
玩轉Sonar
Trust orbtk development issues 2022
【史上最详细】信贷中逾期天数统计说明
Zhou Hongqi, 52 ans, est - il encore jeune?
[programming problem] [scratch Level 2] 2019.09 make bat Challenge Game
从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值
52歲的周鴻禕,還年輕嗎?
随机推荐
Pypharm uses, and the third-party library has errors due to version problems
从Starfish OS持续对SFO的通缩消耗,长远看SFO的价值
华为交换机S5735S-L24T4S-QA2无法telnet远程访问
DNS 系列(一):为什么更新了 DNS 记录不生效?
Two small problems in creating user registration interface
How does starfish OS enable the value of SFO in the fourth phase of SFO destruction?
Vscode software
爬虫实战(八):爬表情包
Seven years' experience of a test engineer -- to you who walk alone all the way (don't give up)
Jouer sonar
Zhou Hongqi, 52 ans, est - il encore jeune?
paddle一个由三个卷积层组成的网络完成cifar10数据集的图像分类任务
C language 005: common examples
搭建ADG过程中复制报错 RMAN-03009 ORA-03113
【编程题】【Scratch二级】2019.09 绘制雪花图案
[programming problem] [scratch Level 2] March 2019 draw a square spiral
第四期SFO销毁,Starfish OS如何对SFO价值赋能?
"An excellent programmer is worth five ordinary programmers", and the gap lies in these seven key points
某马旅游网站开发(登录注册退出功能的实现)
After going to ByteDance, I learned that there are so many test engineers with an annual salary of 40W?