下面输入一个很诡异的链表,暂时称它为“变异链表”,如图4—3所示。从图中可以看出此链表的尾部形成了一个环,请实现一个时间和空间上尽可能高效率的算法来判断输入的链表是否为“变异链表”,要求: 给出算法的基本设计思想。

admin2014-04-17  42

问题 下面输入一个很诡异的链表,暂时称它为“变异链表”,如图4—3所示。从图中可以看出此链表的尾部形成了一个环,请实现一个时间和空间上尽可能高效率的算法来判断输入的链表是否为“变异链表”,要求:

给出算法的基本设计思想。

选项

答案基本设计思想:设置两个指针fast和slow,初始值都指向头结点,slow每次前进一步, fast每次前进两步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定 相遇。当然,如果某时刻fast或者fast→next为空指针,则为无环链表。 可能疑问点:如果有环,为什么两个指针fast和slow必然重合?会不会每次都恰好错过? 提示:因为fast每次走两步,而slow每次走一步,所以它们之间的差距是一步一步缩小 的。当slow进入环入E1点后,fast和slow之间的差距将会一步步缩小,如4→3→2→1→0,到0的时候就重合了。其实这是一个追击问题,是一个比较成熟的定理。

解析
转载请注明原文地址:https://jikaoti.com/ti/w3ajFFFM
0

最新回复(0)