查找单向链表中的最后一个 K

Finding the last K in a singly linked list

我有一个算法应该接受输入 k 和 return 相应的第 k 个最后一个元素,所以如果 k=1,它应该 return 最后一个元素,如果 k=2 如果应该 return 倒数第二个元素...依此类推

我不明白某些代码行在做什么或为什么需要它们,例如:

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循环计算列表的长度LreturnsNIL如果这个长度小于k.

接下来的两行 else tmp = L 是多余的。

n − k + 1 是倒数第 k 个元素的索引。

第二个 while 循环将列表遍历到此元素。