实现一个算法,发现singly linked list中倒数第k个元素;
思路1
如果已知linked list 长度length, kth个元素为(length-k); 通过这种方式可以找到这个元素;
这种解法明显不是interviewer想要的
思路2
循环思路,两根指针,保持量指针定长距离为k;同时移动; p2初始位置为head,p1初始位置为k;
p1到linkedlist队尾时,即认为:p2的位置为倒数k位置
时间复杂度:O(N)
空间复杂度:O(1)
C#代码:
public static LinkedListNode <int > kthToLast(LinkedListNode< int> head, int k)
{
LinkedListNode<int > p1 = head;
LinkedListNode<int > p2 = head;
//从head移动p2,k-1步
for ( int i = 0; i < k; i++)
{
if (p2 == null) return null;
p2 = p2.Next;
}
//同时移动p1,p2;
while (p2 != null)
{
p1 = p1.Next;
p2 = p2.Next;
}
return p1;
}