leetcode刷题5:找出链表中环的位置
来源:互联网 发布:d3.js 入门案例 编辑:程序博客网 时间:2024/05/02 09:48
和上个题类似:给定一个单链表,找出环开始的节点。
使用上一个题目的算法可以判断出当前链表有没有环。
观察1:
如果在快慢指针相遇后,我们继续向前移动慢指针,直到再次相遇,就可以计算出环的长度。
观察2:
使用一个指针遍历链表时,从环开始,经过环的长度次前进,指针会重新指向环开始的位置(从观察1可以很快得出)
观察3:
如果使用两个指针一前一后,假设环的长度为n,前面的指针前进n步之后,后面指针开始前进,则两个指针再次相遇的时候,就是环开始的位置。
综上,根据之前题目的算法可以得到代码:
class Solution:
def detectCycle(self,head):
if head == None:
return None
if head.next == None:
return None
if head.next == head:
return head
fast = head.next.next
slow = head.next
while fast != None and slow != None:
if fast == slow:
flag = True
step = 1
slow=slow.next
while slow!=fast:
slow=slow.next
step +=1
front=rear=head
while step!=0:
step-=1
front=front.next
while front!=rear:
front = front.next
rear = rear.next
return front
if fast.next == None:
return None
fast = fast.next.next
slow = slow.next
# if exist, won't pass through while loop at all.
return None
- leetcode刷题5:找出链表中环的位置
- 找出osd的位置
- LeetCode-28 Implement strStr() (找出字串位置)
- 找出安装后的位置
- OD找出某个线程循环的位置
- 找出宏定义的位置方法
- strstr()找出子串中第一次出现的位置
- 找出数组中元素的位置
- LeetCode 找出 单独的数 Single Number
- 如何利用WinDbg找出程序崩溃的位置
- 如何利用WinDbg找出程序崩溃的位置
- 找出数组中某个元素第一次出现的位置
- 散布着空字符串,找出给定字符串的位置
- 找出数组中最大的数字和位置
- SQL找出某个字符第几个出现的位置
- 编写一个方法,找出给定字符串的位置。
- C#找出字符串中某一字符的所有位置
- 6-2 找出矩阵中最大值所在的位置
- ITK简介与ITK Pipeline
- CVPR 2014 物体检测论文汇总
- 动态生成控件
- ffmpeg参数中文详细解释
- [工具安装记][xz] xz format: source compilation installation
- leetcode刷题5:找出链表中环的位置
- C#-Label-标签格式---ShinePans
- android截屏功能实现
- 构造最大数
- hdu 1241 Oil Deposits
- css笔记(一)——文档流和盒子
- ibatis 配置文件中的<settings>属性
- 达梦云数据中心解决方案
- 论scanf(”%s“)scanf(”%c“)gets()getchar()中TAB,空格,\n是否舍弃的问题。