您的位置:首页 > 职场人生

关于一道微软面试题的解答

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时走过的路程最短。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: