我们用快慢指针的方法,创建两个指针(fast, slow)。我们先让 fast 指针先往后走 k 次,然后在让 fast 和 slow 指针同时往后走,当 fast 指针指向最链表末端也就是 null 的时候,我们的 slow 指针指向的正是倒数第 k 个节点。这是我们只需返回 slow 即可。
具体代码实现如下:
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
if (head == null) {
//如果节点为null,返回null
return null;
}
int size = size(head);
if (k <= 0 || k > size) {
//如果 k 小于等于0或者 k 大于链表节点个数则为错误
return null;
}
ListNode fast = head;
ListNode slow = head;
for (int i = 0; i < k; i++) {
//先往后移动 k 个节点
fast = fast.next;
}
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
return slow;
}
public int size(ListNode head) {
int size = 0;
for (ListNode node = head; node != null; node = node.next) {
size++;
}
return size;
}
}
结果如下图: