关于一道微软面试题的解答
2007-07-07 11:47
501 查看
问题描述:如何判断一个链表是否有环?
问题分析:这个问题的模型类似于中学数学和物理中的行程问题模型:两个人以不同的速度从同一地点同时出发,如果他们的路线是环状,他们一定会相遇;否则他们只能在终点相遇。
问题解答:步长法可解决这个问题。
所谓的步长法,
不是简单地把指针+1或者+2,
而是指
一个
p1=p1->next
另一个
p2=p2->next->next(期间还要检查p2->next是不是NULL)
然后比较p1==p2
如果有任何一个到了NULL,则无循环
如果两个相等了,则有循环
如果不相等,则继续,直到上两种情况出现
问题延伸:假设p1的步长为m,p2的步长为n。只要m和n一个是奇数另一个是偶数都可以解决这个问题。可以证明m=1,n=2时走过的路程最短。
问题分析:这个问题的模型类似于中学数学和物理中的行程问题模型:两个人以不同的速度从同一地点同时出发,如果他们的路线是环状,他们一定会相遇;否则他们只能在终点相遇。
问题解答:步长法可解决这个问题。
所谓的步长法,
不是简单地把指针+1或者+2,
而是指
一个
p1=p1->next
另一个
p2=p2->next->next(期间还要检查p2->next是不是NULL)
然后比较p1==p2
如果有任何一个到了NULL,则无循环
如果两个相等了,则有循环
如果不相等,则继续,直到上两种情况出现
问题延伸:假设p1的步长为m,p2的步长为n。只要m和n一个是奇数另一个是偶数都可以解决这个问题。可以证明m=1,n=2时走过的路程最短。
相关文章推荐
- 关于一道微软面试题(据称)“飞机问题”详细解答
- 关于一道老微软面试题的新解
- 关于一道面试题的解答(华为公司python面试题,要求10分钟写出代码)
- 关于论坛上那个SQL微软面试题。我的解答方法:-)
- 关于一道面试题的分析与解答
- 关于微软的一道面试题
- O(∩_∩)O~,关于一道面试题的分析与解答
- 一道微软面试题的解答【镜子问题】
- 一道关于signed和unsigned的微软面试题
- 一道微软面试题的解答
- 关于论坛上那个SQL微软面试题。我的解答方法 :-)
- 一道关于宏的面试题及解答
- 一道关于宏的面试题及解答
- 关于一道微软面试题的思考
- 关于一道谷歌面试题——丑数的解答
- 关于微软的一道面试题
- 关于一道面试题的源代码解答
- 一道关于JavaScript解析器错误的面试题
- Android关于布局的经典面试题及解答(一)
- 关于二叉树的一道面试题