# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param pHead ListNode类 
# @param k int整型 
# @return ListNode类
#
class Solution:
    """
    解题思路: 
    快慢指针
    """
    def FindKthToTail(self , pHead: ListNode, k: int) -> ListNode:
        cur=pHead
        n=0
        while cur:
            n+=1
            cur=cur.next
        if n<k:
            return None
        fast =pHead
        slow=pHead
        i=k
        while i>0:
            fast=fast.next
            i=i-1
        print("----")
        while fast:
            fast=fast.next
            slow=slow.next
        return slow

    """
    解题步骤: 
    1. 遍历一遍得到链表长度n
    2.比较 n与k ,如果比k小返回一个空节点
    3.移动n-k 次
    时间复杂度O(n) 总共遍历n 个链表元素
    空间复杂度O(1) 指针
    """
    def FindKthToTail1(self , pHead: ListNode, k: int) -> ListNode:
        # write code here
        #统计个数
        # 移动 n-k
        cur=pHead
        n=0
        while cur :
            cur=cur.next 
            n+=1
        if n<k:
            return None
        num =n-k-1
        newhead=pHead
        while num>0:
            num-=1
            newhead =newhead.next
        return newhead