下面的代码返回链表的第k到最后一个元素。但我不明白这是怎么回事,因为'for I in range(k)'不返回从0到k的值吗??而不是k的最后一项?
总的来说,谁能解释一下下面的遍历,因为我不太理解它——我确实理解链表的基本原理和语法,但不能完全理解下面的代码。例如,为什么需要一个跑步者(我假设这是某种指针?)
def kth_to_last(l1,k):
runner = current = l1.head
for i in range(k):
if runner is None:
return None
runner = runner.next
while runner:
current = current.next
runner = runner.next
return current
。输入是一个链表:a ->b→c→d→没有一个如果k等于b,那么输出:b ->c→d→没有一个
在链表中,每个节点只知道下一个节点(有时也是前一个节点)。在这种情况下,你不能只是"跳转"。向前K个节点。你需要向前移动1个节点k次
在本例中,runner是指向"当前"节点的指针。它通常也被命名为"current",但由于它在列表中"运行",并且不太关心它的内容,所以他们将其命名为"runner"。
让运行程序保持路由,即节点#0
runner = runner.next
节点#0旁边的节点是节点#1,所以现在runner是节点#1
runner = runner.next
,现在运行器是节点#2,以此类推。runner = runner的每次迭代。接下来转发你1个节点。所以为了从节点#0移动到节点#27,你需要写runner = runner。接下来的27次,或者使用循环。(注:"if";循环的一部分主要是为了避免异常,因为您无法获得"next";null)
让理解这个函数的一个更简单的方法是找到列表的长度,减少k,然后向前移动这些节点。