赞
踩
收集了一下链表常见的面试题:
1、如何判断一个单链表有环
2、如何判断一个环的入口点在哪里
3、如何知道环的长度
4、如何知道两个单链表(无环)是否相交
5、如果两个单链表(无环)相交,如何知道它们相交的第一个节点是什么
6、如何知道两个单链表(有环)是否相交
7、如果两个单链表(有环)相交,如何知道它们相交的第一个节点是什么
1、采用快慢步长法。令两个指针p和q分别指向头结点,p每次前进一步,q每次前进两步,如果p和q能重合,则有环。可以这么理解,这种做法相当于p静止不动,q每次前进一步,所有肯定有追上p的时候。
我们注意到,指针p和q分别以速度为1和2前进。如果以其它速度前进是否可以呢?
假设p和q分别以速度为v1和v2前进。如果有环,设指针p和q第一次进入环时,他们相对于环中第一个节点的偏移地址分别为a和b(可以把偏移地址理解为节点个数)
这样,可以看出,链表有环的充要条件就是某一次循环时,指针p和q的值相等,就是它们相对环中首节点的偏移量相等。我们设环中的结点个数为n,程序循环了m次。
由此可以有下面等式成立:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。