题目描述:
输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。
如果该链表长度小于k,请返回一个长度为 0 的链表。
思路:定义两个指针,先让快指针走k步,然后快慢指针以一样的速度一起走,这样快慢指针之间的距离始终为k,等快指针走到空的时候,慢指针指向的就是倒数第k个节点。
代码实现如下:
public class Solution {
public ListNode FindKthToTail (ListNode pHead, int k) {
if (k < 0 || pHead == null) return null;
ListNode fast = pHead;
ListNode slow = pHead;
//k有可能大于链表长度,所以要加个条件fast != null防止fast一直走
while (k > 0 && fast != null) {
fast = fast.next;
k--;
}
while (fast != null) {
fast = fast.next;
slow = slow.next;
}
//k没减到0,说明k大于链表长度,返回null
return k > 0 ? null : slow;
}
}