我有一个算法,应该输入k并返回相应的最后k个元素,所以如果k=1,它应该返回最后一个元素,如果k=2,它应该返回最后第二个元素…等等
我不明白一些代码行在做什么或者为什么它们需要在那里,例如:
n = n - k + 1
这是整个代码,如果能帮助理解每一行都在做什么就太好了:
function lastk(List L, Int k) → List
tmp = L
n = 0
while tmp ̸= NIL do
n=n+1
tmp = tmp.next
if n<k then
return NIL
else
tmp = L
n = n − k + 1
i=1
while i < n do
tmp = tmp.next
i=i+1
return tmp
第一个while
循环计算列表的长度,如果L
返回的NIL
的长度小于k
。
下两行else tmp = L
是多余的。
n − k + 1
是k
从末尾开始的第一个元素的索引。
第二个while
循环遍历列表到此元素。