寻找有环单链表的交叉点
2009-08-03 13:45 Jvpy 阅读(596) 评论(0) 收藏 举报
寻找有环单链表的交叉点|计算有环单链表的节点数
有一道著名的面试题目是判断一个单链表中是不是存在环,做法是用两个指针从头节点出发,一个每次一步,一个每次两步,如果相遇则说明有环。有天我就很自然的想到了标题的这个问题,即寻找如何图中e的位置。
注意到对于没有“尾巴”的有n个节点的有环单链表,这两个指针一定是在走了n步之后在起点相遇,则对于有尾巴的情况,两指针的相遇点即交叉点往"后"退尾巴的长度。比如上图所示的情况,两指针的相遇点为m点。这么标题的问题就好解决了:在两指针相遇后,让其中一指针从头节点出发,另外一指针从相遇点出发,则下一次相遇点即交叉点。对于无尾巴的情况,即第0步就是。做到这里,很容易就可以计算出链表的节点数。只是感性的推论,哪天证明一下。
有一道著名的面试题目是判断一个单链表中是不是存在环,做法是用两个指针从头节点出发,一个每次一步,一个每次两步,如果相遇则说明有环。有天我就很自然的想到了标题的这个问题,即寻找如何图中e的位置。
|
|
注意到对于没有“尾巴”的有n个节点的有环单链表,这两个指针一定是在走了n步之后在起点相遇,则对于有尾巴的情况,两指针的相遇点即交叉点往"后"退尾巴的长度。比如上图所示的情况,两指针的相遇点为m点。这么标题的问题就好解决了:在两指针相遇后,让其中一指针从头节点出发,另外一指针从相遇点出发,则下一次相遇点即交叉点。对于无尾巴的情况,即第0步就是。做到这里,很容易就可以计算出链表的节点数。只是感性的推论,哪天证明一下。
浙公网安备 33010602011771号