赞
踩
图1是一个链表环,此链表有8个结点,分别为A-H。假设起点为G,快指针fast和慢指针slow都从G出发,慢指针一次遍历一个结点,快指针一次遍历两个结点,无论他们走多少圈,快慢指针fast和slow相遇的点总是G点,这个毋庸置疑,即slow和fast相遇的第一个结点为G点。
再看图2,将图1的G点到A点的结点扯平得到图2,那么同样的slow和fast还是从G点出发,按照图1的规则,slow和fast相遇的第一个点还是G点,因为当slow走到G’点的时候 fast已经走了两圈,第一圈是从G走到G’,第二圈是从G’到G’ ,这就是slow和fast指针相遇的全过程,此时应该很明了了,G’到A的节点数和G到A的节点数相同,因为从图1和图2的角度看,就相当于将图1的G点到A点扯平了,变成图2了,,,,
此时只需要两个slow指针,一个slow1从G点出发,一个slow2从G’点出发,slow1和slow2相遇的地方就是入口A点。。。。
是不是超级无敌很清晰明了简单 hhhh 代码的话网上应该有很多。。。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。