一、判断单链表是否有环1、遍历链表遍历链表,将已经访问过的结点,设置为已访问,如果访问同一结点两次,则说明有环,时间O(n),空间O(n)。2、链表反转遍历链表,将访问的结点指针反向。如果存在环,反转后next指向原链表头,但链表反转会破坏链表的结构,反转需要注意缓存当前结点的下一结点,时间O(n)...
分类:
其他好文 时间:
2015-03-20 06:47:08
阅读次数:
152
题目:
找出单链表中环的“入口”。
解答步骤:
1、用快慢指针判断是否存在环(慢指针走一步,快指针走两步)。若存在环则继续下面的计算,若不存在则返回nullptr;
2、记录快慢指针相遇的节点n0.
3、一个指针从链表头结点出发,另一个指针从n0出发,“同步前进”,相遇的节点就是环的“入口”。
分析:
由于快慢指针所走的“步数”相同,但快指针每一步...
分类:
其他好文 时间:
2015-03-16 12:59:03
阅读次数:
138
第一步:检测链表是否有环。方法还是比较多的,这里先讲一个:快慢指针。快慢指针的方法,就是让两个指针同时指向链表。在向后遍历的时候,一个指针每次走两步,称为快指针;一个指针每次走一步,称为慢指针。如果快慢指针相遇,则说明链表有环,否则无环。(后面证明。)代码实现如下:// 如果有环,则返回快慢指针相遇...
分类:
其他好文 时间:
2014-11-15 17:04:23
阅读次数:
169
判断单链表是否存在环,如果存在则寻找环的入口点,用快慢指针法...
分类:
其他好文 时间:
2014-09-24 00:09:15
阅读次数:
214
分为两步
第一步 还是利用快慢指针,如果有环的话在利用快慢指针终会相会于一个节点。
第二步。然后从这节点出发每次出发走一步,同时从根节点出发每次出发也走一步则他们两个指针相遇的地方就是环的入口。
第一步好解释那么第二步是为什么呢?
网上有很多解法大都是从数学的角度来分析,有公式也有推算很不直观,我从图形的角度来看的话就相对理解起来简单很多。
将图摊开成一条线,假设我们有环而且...
分类:
其他好文 时间:
2014-08-09 02:40:07
阅读次数:
309
题目:
给定一个单链表,只给出头指针head:
1、如何判断是否存在环?
2、如何知道环的长度?
3、如何找出环的连接点在哪里?
4、带环链表的长度是多少?
解法:
1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。
2、对于问题2,记录下问题1的碰撞点p,sl...
分类:
其他好文 时间:
2014-07-29 18:03:02
阅读次数:
191
题目:Given a linked list, return the node where the cycle begins. If there is no cycle, return null.Follow up:Can you solve it without using extra spac....
分类:
编程语言 时间:
2014-07-23 12:02:46
阅读次数:
304