思路: 利用快节点,先从头节点 偏移 k 个位置,fast指向了第 k+1 个节点,slow指向了头节点。 如果第k+1个节点是空的,那么就返回头节点 否则,不断遍历循环,知道 fast指向空节点,slow就指向了倒数k个位置,因为slow -> fast 中间有k - 1 个节点


/*
 * public class ListNode {
 *   int val;
 *   ListNode next = null;
 *   public ListNode(int val) {
 *     this.val = val;
 *   }
 * }
 */

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead ListNode类 
     * @param k int整型 
     * @return ListNode类
     */
    public ListNode FindKthToTail (ListNode pHead, int k) {
        // write code here
        if(pHead == null){
            return null;
        }

        if(k == 0){
            return null;
        }

        ListNode fast = pHead;
        while(k > 0){
            k --;
            fast = fast.next;
            if(k == 0 && fast  == null){
                return pHead;
            }
            if(fast == null){
                return null;
            }
        }
        ListNode slow = pHead;
        while(fast != null){
            slow = slow.next;
            fast = fast.next;
        }
        
        return slow;
    }
}