剑指offer 链表中环的入口结点
来源:互联网 发布:天刀白玉京捏脸数据 编辑:程序博客网 时间:2024/06/04 19:49
题目描述
一个链表中包含环,请找出该链表的环的入口结点。
思路:
第一步设两个指针fast,slow,然后从头开始,一个指针一下只走1步,1个指针一下子走2步,在某个时刻肯定会相遇。先看如下图:
那么可以得到slow,fast指针走的路径长度为:
2slow=fast
首先设直线跑道的长度为x,圆圈的周长为c,出去黑线部分的长度为y
那么由距离公式得:
2*(x+n*c+y) = x+m*c+y,那么得到x = (m-2*n-1)c+c-y ,发现直线跑道的长度和黑色曲线长度一样,那么可以把一个指针指在起点处,另外一个指在那个相遇点,然后以相同的速度运动,当在直线上运动的指针到达入口时,在圈上的指针必定在入口处,因为x = 某个值* c+黑线长度 ,此时就是链表的入口处;
代码:
/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/class Solution {public: ListNode* EntryNodeOfLoop(ListNode* pHead) { ListNode *p1,*p2; p1 = pHead->next; p2 = pHead->next->next; if(pHead==nullptr||p1==nullptr||p2==nullptr) return nullptr; while(p1!=p2) { if(p1!=nullptr&&p2!=nullptr) { p1 = p1->next; p2 = p2->next->next; } else return nullptr; } p1 = pHead; while(p1!=p2) { p1 = p1->next; p2 = p2->next; } return p1; }};
阅读全文
0 0
- 剑指offer--链表中环的入口结点
- 《剑指offer》链表中环的入口结点
- 剑指offer—链表中环的入口结点
- 剑指offer:链表中环的入口结点
- [剑指offer]链表中环的入口结点
- 剑指Offer--056-链表中环的入口结点
- 剑指Offer: 链表中环的入口结点
- 剑指offer-链表中环的入口结点
- 《剑指offer》-链表中环的入口结点
- 剑指Offer 56 链表中环的入口结点
- 剑指offer 链表中环的入口结点
- 剑指offer-55.链表中环的入口结点
- 【剑指offer】链表中环的入口结点
- 【剑指offer】链表中环的入口结点
- 剑指offer-链表中环的入口结点
- 剑指Offer:链表中环的入口结点
- 剑指offer:链表中环的入口结点
- 剑指offer--链表中环的入口结点
- 【快哥评】一文读懂云计算关键技术——openstack的总体架构
- Android中画布连线的连线动画的实现
- 静态化环境搭建Freemarker
- Oracle表分区
- JavaScript中的表达式(expression)和语句/声明(statement)
- 剑指offer 链表中环的入口结点
- Ubuntu终端常用的快捷键
- python 3 中的pickle模块 阿波的博客
- 学习Less-看这篇就够了
- Mac OSX 正确地同时安装Python 2.7 和Python3
- 【Keras】MLP多层感知机
- 静态顺序表用C实现的各种操作
- Exact Change
- B. XK Segments(暴力)