擅长:python、mysql、java
<p>算法背后的想法是你不知道列表的末尾在哪里。但是,如果一个指针的步进速度是另一个指针的两倍,那么它将到达终点,就像另一个指针到达中间一样。你知道吗</p>
<p>初始化将中间(<code>first</code>)和结束(<code>last</code>)指针设置为最初唯一知道的东西:列表的开始。循环体将它们向前移动:<code>first = first.next</code>向前移动一步,而<code>last = last.next.next</code>向前移动两步。因为<code>last</code>总是在<code>first</code>之前,所以不需要检查<code>first</code>是否可以向前移动。相反,循环的条件检查在步进<code>last</code>中使用的两个引用是否都是非<code>None</code>:<code>while last and last.next:</code>。你知道吗</p>
<p>注意,如果列表有一个元素,<code>last</code>将不会移动,因为<code>last.next</code>是<code>None</code>。但是,对于两个元素,<code>last</code>将移动,<code>first</code>也将移动。结果是满足了从具有偶数个元素的列表中选取第二个中间元素的条件。你知道吗</p>