剑指offer 面试23题
面试23题:
题目:如果一个链表中包含环,如何找出环的入口节点?
解题分析:其实此题可以分解为三个题目:1)如何判断一个链表中是否包含环?2)如何找到环的入口节点?3)如何得到环中节点的数目?
解决此题:可以设置两个指针,一快一慢。
1.两个指针一个fast、一个slow同时从一个链表的头部出发 fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇,(如果相遇就证明此链表包含环,否则没有环,解决问题1)2.1 此时只需要把其中的一个指针重新指向链表头部,另一个不变(还在环内), 这次两个指针一次走一步,相遇的地方就是入口节点(解决问题2,得到环的入口节点)。# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead):
pFast=pHead
pSlow=pHead
while pFast!=None and pFast.next!=None:
pFast=pFast.next.next
pSlow=pSlow.next
#两个指针相遇且非空,则说明有环
if pFast==pSlow:
break
if pFast==None or pFast.next==None:
return None
pFast=pHead
while (pFast != pSlow):
pFast = pFast.next
pSlow = pSlow.next
#返回环的入口节点
return pFast
如果另需求环中节点的个数,可以更改代码为:
# -*- coding:utf-8 -*-
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def EntryNodeOfLoop(self, pHead):
pFast=pHead
pSlow=pHead
while pFast!=None and pFast.next!=None:
pFast=pFast.next.next
pSlow=pSlow.next
#两个指针相遇且非空,则说明有环
if pFast==pSlow:
break
if pFast==None or pFast.next==None:
return None
meetingNode=pFast
nodesInLoop=1
while(pFast.next!=meetingNode):
pFast=pFast.next
nodesInLoop+=1
#返回环中节点数目
return nodesInLoop
剑指offer 面试23题的更多相关文章
- 剑指offer 面试5题
面试5题: 题目:请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 方法一: # -*- co ...
- 剑指offer 面试8题
面试8题: 题目:二叉树的下一个节点 题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路:详见剑 ...
- 剑指offer 面试10题
面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项.n<=39 n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1 ...
- 剑指offer 面试11题
面试11题: 题目: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4 ...
- 剑指offer 面试14题
面试14题: 题目:剪绳子 题:给你一根长度为n的绳子,请把绳子剪成m段(m,n都是整数,且n>1,m>1),每段绳子的长度记为k[0],k[1],k[2],...,k[m].请问k[0] ...
- 剑指offer 面试17题
面试17题: 题目:打印从1到最大的n位数 题:输入数字n,按顺序打印出从1到最大的n位十进制数,比如输入3,则打印出1.2.3一直到最大的3位数999. 解题思路:需要考虑大数问题,这是题目设置的陷 ...
- 剑指offer 面试26题
面试26题: 题目:树的子结构 题:输入两棵二叉树A和B,判断B是不是A的子结构. 解题思路:递归,注意空指针的情况. 解题代码: # -*- coding:utf-8 -*- # class Tre ...
- 剑指offer 面试29题
面试29题: 题目:顺时针打印矩阵(同LeetCode 螺旋矩阵打印) 题:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 ...
- 剑指offer 面试32题
面试32题: 题目:从上到下打印二叉树 题:不分行从上到下打印二叉树 解题代码: # -*- coding:utf-8 -*- # class TreeNode: # def __init__(sel ...
随机推荐
- ddr3调试经验分享(一)——modelsim实现对vivado中的MIG ddr3的仿真
Vivado中的MIG已经集成了modelsim仿真环境,是不是所有IP 都有这个福利呢,不知道哦,没空去验证. 第一步:使用vivado中的MIG IP生成一堆东西 ,这个过程自己百度.或者是ug5 ...
- 恩布企业 IM iOS端 1.1 公布, 开源手机 IM
恩布企业IM的 iOS 苹果开源手机client EntboostChat 公布 1.1 开发版本号.开源企业IM.企业即时通讯软件: 主要更新内容: 录界面添加自己定义LOGO显示 持部门.群组.联 ...
- 运行cotroller后,查看vuser日志为空
查看C:\Users\***\AppData\Local\Temp\res\log下,文件夹空,处理如下 run-time-setting中,选中always send message
- 常用校验算法CRC、MD5、SHA_转
1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...
- 如何给Eclipse添加一个JDK或JRE
第一: 第二: 第三: 第四:
- servlet部署到tomcat中
引用:http://blog.csdn.net/shuidao/article/details/1738059 配置,部署 servlet: 1. 在tomcat的安装目录下 找到webapps 文件 ...
- 一个改动配置文件的linux shell script
不久以前,以前搜到一篇博客是读取配置文件的,http://www.cnblogs.com/bo083/archive/2012/11/19/2777076.html,用到如今,感觉十分方便.感谢作者. ...
- java httpSession 设置超时时间
1.设置过期时间方式一:在tomcat/conf/web.xml下加入一下内容 <session-config> <session-timeout>90</session ...
- 可以将化学结构NMR图谱这样导入Word
在化学各个领域中,大家常常会用到ChemDraw化学绘图软件来绘制各种图形,ChemDraw因其出色的功能在全球范围内深受欢迎,但是一些用户朋友对于一些功能还不是很了解,需要通过一些教程来了解如何操作 ...
- TOC之关键链项目管理遇到软件project7原则
编著者:张克强 微博:张克强-敏捷307 软件project7原则简单介绍 美国著名软件project专家鲍伊姆(B.W.Boehm,也又另译为勃姆)在总结软件project准则和信条的基础上, ...