class Solution:
    def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
        # write code here
        # 第一种 数组法,直接返回
         res = []
         while pHead:
             res.append(pHead)
             pHead = pHead.next
         if k > len(res) or not k: return None # 判断非法的 k 值
         return res[-k]
        # 第二种 快慢指针 双指针
        fast = pHead
        slow = pHead # 定义快慢指针
        for i in range(0, k):
            if not fast:
                return None
            fast = fast.next # 快指针的提前k步
        # 双指针同时行走,每次都为1格,中间始终相差为k步
        while fast: # fast有值到了末尾就结束,返回slow的位置就是倒数k位的位置。然后返回
            # slow就是剩余的k位
            fast = fast.next
            slow = slow.next
        return slow
        # 第三种 栈的方法