/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead ListNode类 
 * @param k int整型 
 * @return ListNode类
 */
typedef struct ListNode ListNode;
struct ListNode* FindKthToTail(struct ListNode* pHead, int k ) {

//    最垃圾的方法,需要遍历两次整个链表
//     ListNode* cur=pHead;
//     int length=0;
//     while(cur!=NULL){
//         cur=cur->next;
//         length++;
//     }
//     if(k>length)
//         return NULL;
//     int target=length-k+1;
//     ListNode* returnNode=pHead;
//     for(;target>1;target--){
//         returnNode=returnNode->next;
//     }
    
//     return returnNode;
    
    //第二种方法,快慢指针,值得推荐
    ListNode* fast=pHead,* slow=pHead;
    
    for(int i=k;i>0;i--){
        if(fast==NULL)
            return NULL;
        fast=fast->next;
    }
    while(fast!=NULL){
        fast=fast->next;
        slow=slow->next;
    }
    
    return slow;
    
    
}